Можно ли отформатировать этот образец:
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 может улучшить читаемость: этот синтаксис массива допускает произвольные пробелы между словами.
источник
sh
это не обязательно Bash, и особенно не в Debian и Ubuntu.Вы можете избежать разрыва строки с помощью обратной косой черты:
источник
Вы можете экранировать символы новой строки до / после каждого элемента, который вы просматриваете:
Или для этого простого примера:
который имеет тот же результат.
Связанные с:
Вариация с использованием
bash
массива:источник
Если переключение на
zsh
вариант:источник
Вы можете использовать
loop
команду, доступную здесь , вот так:или, если у вас есть список в виде файла:
источник
источник
$list
строка содержит символы, обозначающие имя файла (list='* * * *'
), оболочка потенциально заменит их соответствующими именами файлов.То же самое, меньше текста:
источник
string1
и т. д. не являются литеральными значениями, которые должны отображаться, а являются заполнителями, поэтому этот подход не работает.array ( … )
? просто делайfor i in string{1..7}; do echo "$i"; done
; дажеprintf '%s\n' string{1..7}