배열 요소를 Bash에서 별도의 줄로 인쇄하시겠습니까?
Bash 배열의 배열 요소를 별도의 줄로 인쇄하려면 어떻게 해야 합니까?이것은 효과가 있지만, 확실히 더 나은 방법이 있습니다.
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
이것을 시도했지만 작동하지 않았습니다.
$ IFS=$'\n' echo ${my_array[*]}
one two three
다음 작업을 수행합니다.
$ printf '%s\n' "${my_array[@]}"
사이의 차이$@
그리고.$*
:
따옴표를 붙이지 않으면 결과가 지정되지 않습니다.Bash에서는 둘 다 별도의 인수로 확장한 다음 단어를 분할하고 글로벌화합니다.
인용,
"$@"
각 요소를 별도의 인수로 확장하는 동안"$*"
하나의 인수로 병합된 인수로 확장됩니다."$1c$2c..."
(어디서c
의 첫 번째 문자입니다.IFS
).
당신은 거의 항상 원하고 있습니다."$@"
그것도 마찬가지입니다."${arr[@]}"
.
항상 그들을 이중 인용!
다음과 같이 주장을 인용합니다.
( IFS=$'\n'; echo "${my_array[*]}" )
서브 셸은 사용 후 IFS를 복원하는 데 도움이 됩니다.
사용 대상:
for each in "${alpha[@]}"
do
echo "$each"
done
기록 사용. 값이 다음을 포함하는 경우 이 작업은 실패합니다.!
:
history -p "${alpha[@]}"
기본 이름 사용. 값에 다음이 포함된 경우 이 작업은 실패합니다./
:
basename -a "${alpha[@]}"
shuf를 사용하면 결과가 순서대로 나오지 않을 수 있습니다.
shuf -e "${alpha[@]}"
또 다른 유용한 변형은 파이프입니다.tr
:
echo "${my_array[@]}" | tr ' ' '\n'
심플하고 컴팩트해 보입니다.
저는 여기 거대한 곳에서 답을 시도했지만, 어떤 기쁨도 얻지 못했습니다. 그래서 저는 이렇게 했습니다. 지저분할지 모르지만, 일을 했습니다.
# 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로 인쇄될 수 있다고 가정합니다.
루프용 Bash C 스타일을 사용하여 원하는 작업을 수행할 수 있습니다.
my_array=(one two three)
for ((i=0; i < ${#my_array[@]}; i++ )); do echo "${my_array[$i]}"; done
one
two
three
하위 셸을 사용하지 않도록 eval을 사용할 수 있다는 것을 알게 되었습니다.따라서:
IFS=$'\n' eval 'echo "${my_array[*]}"'
InzShone은 내장 명령을 사용할 수 있습니다.print -l $path
언급URL : https://stackoverflow.com/questions/15691942/print-array-elements-on-separate-lines-in-bash
'programing' 카테고리의 다른 글
에서 명명된 캡처 그룹에 액세스하려면 어떻게 해야 합니까?NET 정규식? (0) | 2023.05.07 |
---|---|
컬렉션의 항목에 액세스합니다.인덱스별 정렬 딕트 (0) | 2023.05.07 |
의 문자열에서 분음 부호(악센트)를 제거하려면 어떻게 해야 합니까?NET? (0) | 2023.05.07 |
게시물:복합 키를 사용하는 방법? (0) | 2023.05.07 |
WPF 문자열 형식={0:C} 달러로 표시 (0) | 2023.05.07 |