Один из файлов запуска вашей оболочки содержит команду, которая не найдена. Сообщение об ошибке указывает, что это команда aliases.
. Поскольку это выглядит как конец предложения текст (, а не шелл-код ), я предполагаю, что это произошло из-за случайного удаления символа комментария(#
)в какой-то строке файла.
Взгляните на ~/.bash_profile
или ~/.bashrc
или любой другой файл запуска оболочки, который вы недавно редактировали, и найдите в них строку aliases.
, это может помочь вам определить проблему.
Без изменения IFS
, начиная с Bash 4.4:
readarray -td '|' arr < <(printf '%s' "$var")
$ var='A|B|C|D'
$ readarray -td '|' arr < <(printf '%s' "$var")
$ echo "${arr[0]}"; echo "${arr[3]}"
A
D
См. объяснение в help readarray
.
Примечание. :Мое предыдущее предложение (readarray -td '|' arr <<< "$var"
), хотя и короче, заключалось в том, чтобы вставить ложный перевод строки в последний элемент массива, как указал Фредди.
Предполагая zsh
, вы можете использовать флаг расширения параметра s
, который будет работать с любыми символами или не -символами, содержащимися в элементах:
$ string=$'first element|second\nbinary\x80element\0||second-last|'
$ array=("${(@s[|])string}")
$ typeset -p string array
typeset string=$'first element|second\nbinary\M-\C-@element\C-@||second-last|'
typeset -a array=( 'first element' $'second\nbinary\M-\C-@element\C-@' '' second-last '' )
Обратите внимание, что пустая строка разбивается на один пустой элемент.(string=''
дает array=( '' )
, а неarray=( )
).
Если предположитьbash
:
Вы можете использовать разбиение на слова. Внутренний разделитель полей (IFS )по умолчанию — пробел, табуляция или новая строка. Но вы можете переопределить его, установив переменную среды IFS
, после чего вы можете использовать обычные способы создания переменной :
set -f # disable filename expansion
IFS='|' arr=($variable_1)
илиdeclare
:
IFS='|' declare -a 'arr=($variable_1)'
илиread
:
IFS='|' read -ra arr <<< "$variable_1"
Если вы измените переменную IFS
таким образом, вы можете сначала сохранить ее в другой переменной, а затем сбросить:
OLD_IFS="$IFS"
# my commands
IFS="$OLD_IFS"