VAR=a,b,c,d
# VAR=$(echo $VAR|tr -d '\n')
echo "[$VAR]"
readarray -td, ARR<<< "$VAR"
declare -p ARR
Результат:
[a,b,c,d]
declare -a ARR=([0]="a" [1]="b" [2]="c" [3]=$'d\n')
Как я могу сказать, readarray
чтобы не добавлять заключительный перевод строки \n
? В чем смысл последнего $
символа?
bash
bash-array
user1156544
источник
источник
"What is the meaning of the latest $ symbol?"
Ответы:
Неявный завершающий символ новой строки добавляется не
readarray
встроенной функцией, а функцией here-string (<<<
)bash
, см. Почему bash here-string добавляет завершающий символ новой строки? , Вы можете избавиться от этого, напечатав строку без использования новой строки,printf
и прочитав ее по методике подстановки процесса< <()
будет правильно генерировать сейчас
источник
Вы можете использовать split + glob (что происходит, когда вы оставляете расширение без кавычек в списках). Это мешает нам большую часть времени, было бы стыдно не использовать его, когда нам это действительно нужно:
Это немного менее запутанно, чем запись временного файла и последующее обращение
readarray
к нему, как вreadarray <<< "$string"
подходе (также обратите внимание, чтоreadarray -d
нужна очень свежая версияbash
).Обратите внимание, что, несмотря на
S
inIFS
(который обозначает разделитель ), он работает так же, как иreadarray
в этомa,,b,
, разделен на"a"
,""
и"b"
только.Для реального оператора расщепления вы можете использовать
zsh
вместо:(
@
и двойные кавычки для сохранения пустых элементов).источник
readarray <<< "$string"
Пишет в файл tempp , а затем удаляет его вместо того , чтобы использовать память?readarray -d
Консервированная версия ответа @ StéphaneChazelas:
local -
Сделает варианты , какset -f
(noglob
) локальные функции, так же , как переменные.declare -n a=$1
Создаст локальную переменную вa
качестве псевдонима к глобальной переменной с именем на$1
(первый аргумент функции).источник