Подтвердить что ты не робот

Что такое хороший эквивалент спискам Perl в bash?

В perl можно было бы просто сделать следующее, чтобы хранить и перебирать список имен

my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
        print $_;
}

Что бы эквивалент был в bash?

4b9b3361

Ответ 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