Массив оболочки Bourne

Никакое различие, они оба становятся владельцами набора сайта.:)

0
задан 9 February 2010 в 22:56
2 ответа

Ваше идеальное решение является намного более простым, чем массив удара (и намного более портативным, чтобы не колотить оболочки стиля границы):

HOSTS="one two three four"
for H in $HOSTS ; do
    [... whatever for ${H} ...]
done

for разделит на пробеле в строке :-)

3
ответ дан 4 December 2019 в 12:10
  • 1
    Спасибо! Кроме того, именно так то, что я знаю, как - как я правильно определил бы массив строк? –  Skone 9 February 2010 в 23:08
  • 2
    I' m вполне уверенный Ваш синтаксис определения массива правилен выше, но элементы должны быть обращены тем же путем, массивы C-стиля (не уверенный, если Вы можете for по ним путь you' попытка ре к или не - похожа на you' d нужен perl-стиль foreach вид конструкции). Я don' t делают много определенного для удара материала лично, потому что я пытаюсь сохранить вещи портативными, но tldp.org/LDP/abs/html/arrays.html походит на хорошую ссылку –  voretaq7 9 February 2010 в 23:39
  • 3
    Поскольку можно выполнить итерации по пробелу, или новая строка разделила значения, Вам почти никогда не нужен массив в Bash. При необходимости в более сложной структуре, Вы часто заканчиваете тем, что имели требования, которые способствуют чему-то как Perl или Python. Для итерации по циклу Bash, я обычно использую стиль C для цикла со счетчиком, но он может также быть сделан с " для ХОСТА в $ {ХОСТЫ}; действительно повторите $ {ХОСТ}; done". –  CarpeNoctem 10 February 2010 в 00:52

Вы должны использовать @ или * для доступа к элементам в массиве (информация, как обычно, скрыта в документации 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 из-за имен файлов с пробелами.

1
ответ дан 4 December 2019 в 12:10

Теги

Похожие вопросы