Практическое написание сценариев командной оболочки Bash/Bash подстановки: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 749:
echo "$item"
done
# Результат:
# /home/john/files/My
# document.txt
# /home/alice/music
# collection/jazz/Louis
# Armstrong
#
# Вместо двух вхождений мы получили 5 из-за разбиения на голые слова. Чтобы пресечь это, мы должны
# закавычить подстановки.
# ПРАВИЛЬНО (1)
for item in "$ITEM_1" "$ITEM_2"; do
echo "$item"
done
# Результат:
# /home/john/files/My document.txt
# /home/alice/music collection/jazz/Louis Armstrong
 
# Однако мы вынуждены перечислять элементы сами, когда хотелось бы формировать список для цикла автоматически.
# Для этих целей лучше всего воспользоваться массивом.
 
ARRAY+=("$ITEM_1") # Кавычки ставить важно, чтобы не разбить строку по пробелам и не получить мнимые элементы.
ARRAY+=("$ITEM_2")
# При подстановке массива как списка, важно использовать подстановку с '@' и использовать двойные кавычки,
# чтобы пресечь разбиение элементов по пробелам.
# ПРАВИЛЬНО (2)
for item in "${ARRAY[@]}"; do
echo "$item"
done
# Результат
# /home/john/files/My document.txt
# /home/alice/music collection/jazz/Louis Armstrong
 
# Также обратим внимание, что когда мы передаем сформированный из массива список в функцию, то простановка
# кавычек также обязательна.
# ПРАВИЛЬНО
arg_printer "${ARRAY[@]}"
# Результат:
# Arg counter: 2
# 0: '/home/john/files/My document.txt'
# 1: '/home/alice/music collection/jazz/Louis Armstrong'
</source>