단순히 저장하고 이름bash의 Perl 목록에 해당하는 것은 무엇입니까? 펄 하나에서
my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
print $_;
}
에 해당하는 bash는 무엇 일 것 목록을 반복하려면 다음을 할 것? 이처럼
단순히 저장하고 이름bash의 Perl 목록에 해당하는 것은 무엇입니까? 펄 하나에서
my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
print $_;
}
에 해당하는 bash는 무엇 일 것 목록을 반복하려면 다음을 할 것? 이처럼
는 떠들썩한 파티 (POSIX 쉬 달리) 배열 지원
fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
echo "${fruit}"
done
이 해당 배열 요소 공백 또는 $ IFS의 다른 부재를 포함 할 수있는 이점을 갖고; 그것들이 정확하게 다른 요소들로 삽입되는 한, 그들은 같은 방식으로 읽혀진다.
for i in apple orange kiwi do echo $i done
'echo "$ i"'- 따옴표없이, 이것은 glob 확장과 요소에 대한 IFS 분할을 수행하여'foo bar'를'foo bar'와 동일하게 만들고'* .txt' echo 리터럴'* .txt'을 내보내는 대신 현재 디렉토리에있는 모든 일치하는 파일을 찾습니다. –
: 당신의 과일의 이름에 공백이있는 경우이 작동하지 않습니다
FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
echo $FRUIT
done
알 수 있습니다. 이 경우 대신에 this answer을 참조하십시오. 이식성은 약간 적지 만 훨씬 강력합니다.
Mac OS X의 Bash에서는 'do'앞에 세미콜론 또는 줄 바꿈이 필요합니다. – emk
예, "do"가 새 줄에 있지 않으면 세미콜론이 필요합니다. 또한 $ IFS에는이 작업을위한 공간이 있어야합니다. –
반복에 IFS에 따라 (단지 할당이 아닌) 나쁜 주주 (juju)가 잘못되어이 답변이 차선입니다. 줘서, 제 것이 너무 했어요. - zsh에서 테스트를하고 있었고, bash 이후로 수정되었습니다. –
내가 좋아하는 대답이 올바른 대답으로 받아 들여 졌으므로, 지금은 다른 주제로 옮겨 가겠습니다 : 개인 이익을 위해 IFS
을 사용하는 방법. - P
IFS
변경이 자신의 서브 프로세스로 격리되도록 내가 괄호 안에 코드를 삽입 한
fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
for fruit in $fruits; do
echo "$fruit"
done)
; 따라서 괄호로 묶인 섹션의 끝에서 IFS
은 이전 값으로 되돌려집니다. :-)
Debian 및 Mac OS X에서 bash를 사용하여 "건조한"및 "망고"인쇄를 별도의 과일로 볼 수도 있습니다. 따라서이 기능은 IFS를 보호하지 못하는 것 같습니다. :-( – emk
emk, 그건 나쁘다 - 나는 zsh에 대해 테스트를하고 있었고, bash가 아니라 그 이후로 수정했다. –
나는 이것이 작동하는 것을 확인할 수있다. – emk