답변:
이것을 시도하십시오 :
$ printf '%s\n' "${my_array[@]}"
의 차이 $@
와 $*
:
인용되지 않은 결과는 지정되지 않습니다. Bash에서 둘 다 확장하여 args를 분리 한 다음 단어 분할 및 globbed를 수행합니다.
인용 "$@"
하면 각 요소를 별도의 인수로 "$*"
확장하고 하나의 인수로 병합 된 인수로 확장합니다 "$1c$2c..."
(여기서 c
첫 번째 문자는 IFS
).
당신은 거의 항상 원합니다 "$@"
. 동일합니다 "${arr[@]}"
.
항상 인용하십시오!
| grep -v '^$'
있습니까?
반향 할 인수를 인용하십시오.
( IFS=$'\n'; echo "${my_array[*]}" )
하위 쉘은 사용 후 IFS 복원을 돕습니다.
IFS=$'\n' echo "${my_array[*]}"
작동하지 않습니다. 오 잘!
echo
Bash에 내장되어 있기 때문에 작동하지 않는다고 생각합니다 . 그러나 함수로 감싸면 작동합니다! gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8
사용 을 위해 :
for each in "${alpha[@]}"
do
echo "$each"
done
역사 사용하기 ; 값에 다음이 포함되어 있으면 실패합니다 !
.
history -p "${alpha[@]}"
basename 사용 ; 값에 다음이 포함되어 있으면 실패합니다 /
.
basename -a "${alpha[@]}"
shuf 사용 ; 결과가 순서대로 나오지 않을 수 있습니다.
shuf -e "${alpha[@]}"
나는 거대한 for ... if 루프에서 여기에 답을 시도했지만 아무런 기쁨도 얻지 못했습니다.
# EXP_LIST2 is iterated
# imagine a for loop
EXP_LIST="List item"
EXP_LIST2="$EXP_LIST2 \n $EXP_LIST"
done
echo -e $EXP_LIST2
그것은 목록에 공백을 추가했지만 괜찮습니다-조금 들여 쓰기를 원했습니다. 또한 "\ n"이 원래 $ EP_LIST로 인쇄 될 수 있다고 가정합니다.
또 다른 유용한 변형은 다음과 같은 파이프입니다 tr
.
echo "${my_array[@]}" | tr ' ' '\n'
이것은 간단하고 컴팩트하게 보입니다.
my_array=( "one two" three )
4
+ 에 광고 된대로 작동하지 echo "${my_array[@]}" | tr '' ' \n'
않았지만 개인적으로 그렇게 사용하지 않는 것이 좋았습니다 echo
. tr
나의 선택은 tr '' ' \n' <<<"${my_array[@]}"
나중에 읽기가 조금 더 쉽다고 생각합니다 .