Можно ли отформатировать этот образец:
for i in string1 string2 stringN
do
echo $i
done
к чему-то похожему на это:
for i in
string1
string2
stringN
do
echo $i
done
РЕДАКТИРОВАТЬ: Извините за путаницу, не осознавал, что существуют разные методы выполнения скрипта - sh< scriptname >
по сравнению сbash < scriptname >
; а также то, что я не могу назвать прямо сейчас -#!/ bin / sh
и #!/ bin / bash
:)
Использование массивов в bash может помочь читабельности: этот синтаксис массива допускает произвольное пробелы между словами.
strings=(
string1
string2
"string with spaces"
stringN
)
for i in "${strings[@]}"; do
echo "$i"
done
Вы можете избежать разрыва строки с обратной косой чертой:
$ for i in \
> hello \
> world
> do
> echo $i
> done
hello
world
$
Вы можете избежать новых строк до / после каждого элемента, который вы перелистываете:
for i in \
string1 \
string2 \
stringN
do
printf '%s\n' "$i"
done
Или, для этого простого примера:
printf '%s\n' string1 string2 stringN
который имеет тот же результат.
Связанный:
Вариация с использованием массива bash
:
strings=(
string1
string2
stringN
)
printf '%s\n' "${strings[@]}"
Если есть возможность переключения на zsh
:
for string (
string1
'other string'
etc..
) printf '%s\n' "$string"
Вы можете использовать команду loop
, доступную здесь, например так:
$ loop "echo $ITEM" --for string1,string2,string3
или, если у вас есть список в виде файла:
$ cat file_list.txt | loop "echo $ITEM"
list = 'a b c d'
для элемента в $ list; do
эхо "$ element"
сделанный