Ваше идеальное решение является намного более простым, чем массив удара (и намного более портативным, чтобы не колотить оболочки стиля границы):
HOSTS="one two three four"
for H in $HOSTS ; do
[... whatever for ${H} ...]
done
for
разделит на пробеле в строке :-)
Вы должны использовать @
или *
для доступа к элементам в массиве (информация, как обычно, скрыта в документации bash ]):
HOSTS=(host1.domain.com host2.domain.com)
for HOST in ${HOSTS[@]}
do
HOST_DIR_NAME=${HOST//./-}
rsync backup_user@$HOST:/backup/blah/blah /backup/$HOST_DIR_NAME/blah/blah
done
Использование запятых в качестве разделителя элементов неверно, а использование кавычек предназначено для защиты от пробелов и расширения оболочки. Пробелы также имеют значение: HOST_DIR_NAME = ...
ожидает команду с именем HOST_DIR_NAME
и запускает ее с помощью = ...
в качестве аргументов, а HOST_DIR_NAME = ...
является присвоением.
Я также должен не согласиться с некоторыми предыдущими комментариями: мне часто приходится использовать массивы в Bash из-за имен файлов с пробелами.
for
по ним путь you' попытка ре к или не - похожа на you' d нужен perl-стильforeach
вид конструкции). Я don' t делают много определенного для удара материала лично, потому что я пытаюсь сохранить вещи портативными, но tldp.org/LDP/abs/html/arrays.html походит на хорошую ссылку – voretaq7 9 February 2010 в 23:39