Что такое хороший эквивалент спискам Perl в bash?
В perl можно было бы просто сделать следующее, чтобы хранить и перебирать список имен
my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
print $_;
}
Что бы эквивалент был в bash?
Ответы
Ответ 1
bash (в отличие от POSIX sh) поддерживает массивы:
fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
echo "${fruit}"
done
Это имеет то преимущество, что элементы массива могут содержать пробелы или другие члены $IFS; если они были правильно вставлены как отдельные элементы, они считываются одинаково.
Ответ 2
Вот так:
FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
echo $FRUIT
done
Обратите внимание, что это не будет работать, если в именах ваших фруктов есть пробелы. В этом случае см. этот ответ, который немного менее портативен, но гораздо более надежный.
Ответ 3
Теперь, когда ответ, который мне нравится, был принят как правильный ответ, я перейду к другой теме: как использовать IFS
для личной выгоды.:-P
fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
for fruit in $fruits; do
echo "$fruit"
done)
Я поставил код в скобках, так что изменение IFS
изолировано в свой собственный подпроцесс; таким образом, в конце секции в скобках IFS
возвращается к своему старому значению.: -)
Ответ 4
for i in apple orange kiwi
do
echo $i
done