У меня есть переменная:
var='/path/to/filename.ext
/path/to/filename2.ext
/path/to/filename3.ext'
Я хочу поместить все строки, разделенные новой строкой в массиве:
declare -a arr
Основываясь на многочисленных сообщениях здесь, в StackOverflow, я нашел несколько способов:
# method 1: while loop
while read line; do
arr+=($line)
done <<< "$var"
# method 2: readarray
readarray -t arr <<< "$var"
# method 3:
IFS=$'\n'
arr=("$var")
Однако, прежде чем я узнал все эти методы, я использовал другой, а именно:
# method 4 (not working in the current situation)
IFS=$'\n'
read -a arr <<< "$var"
Это не работает, потому что он сохранит только первую строку var
в arr[0]
. Я не понимаю, почему он не работает в ситуациях, когда разделитель является символом новой строки, тогда как он работает с другими разделителями, например:
IFS='|'
strings='/path/to/filename.ext|/path/to/filename2.ext|'
read -a arr <<< "$strings"
Есть ли что-то, что мне не хватает?
Изменить
Убрал мой собственный ответ, который утверждал, что вы не можете использовать read
для этой цели. Оказывается, вы можете.