1

Пример: вы обычно перечисляете значения в горизонтальном макете

for var in 0 1 2 3 4 5 6 7 8 9 do echo $var done

Было бы неплохо для контроля версий и читабельности вводить каждый элемент списка в отдельной строке. Это возможно?

Вы не можете сделать следующее, с или без /r/n:

for var in 0 1 2 3 4 5 6
7 8 9 do echo $var done

Интересно, что это почти работает (одинаково независимо от одинарных или двойных кавычек):

for var in '0 1 2 3 4 5 6 7 8 9' do echo $var done

Вывод:

-bash: demo.sh: line 11: syntax error near unexpected token ` '0 1 2 3 4 5 6 7 8 9'' -bash: demo.sh: line 11: ` 9''

Это не работает, независимо от одинарных или двойных кавычек.

for var in "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" do echo $var done

1 ответ1

1

Попробуйте эту протестированную версию:

#!/bin/bash --
for var in  \
1 \
2 \
3 \
4 \
6 \
 ; do
  printf "%s\n" "${var}"
done

for цикла расщепляется по умолчанию строки , содержащей (пробелы) и \n на отдельные элементы.

' используется в вашем цикле for инструктирует оболочку (в вашей версии) рассматривать параметр как одно единственное значение, строку, содержащую несколько строк.

Тест:

$ ./list.sh
1
2
3
4
6

Первая версия для справки:

#!/bin/bash --
listint='
1
2
3
4
6
'

for var in ${listint} ; do
  printf "%s\n" "${var}"
done

' Позволяет определить строку в нескольких строках, включая \n .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .