Это-
$a=`ls` | do something | etc. | etc. | etc... echo "$a"
дает это-
file1 file2 file3
Но я хочу добавить кое-что в конец этой переменной, поэтому я попытался
a=${a}\nfile4
Но я понимаю, что
file1 file2 file3nfile4 # wrong!
В Bash вы можете добавить переменную, используя var+=value
. Но ваша проблема не в этом, а в создании новой строки. Самый простой способ – использовать $'..'
, которые интерпретируют обратную косую черту как \n
для новой строки:
a+=$'\nfile4'
Можете ли вы попробовать с эхо:
a=$(echo -e "${a}\nfile")
Если все, что вы хотите сделать, это получить список файлов в текущем каталоге, а затем добавить строку к каждому из этих имен:
set -- * printf '%s-somestring\n' "$@"
или, используя массив bash
,
names=( * ) printf '%s-somestring\n' "${names[@]}"
Используя массив, либо массив позиционных параметров (первый пример выше, который будет работать во всех shellх POSIX), либо массив bash
, является наиболее безопасным способом работы с именами файлов. Если вы конвертируете имена файлов в какую-то строку с разделителями, то у вас возникнут проблемы, когда у вас будут имена файлов, содержащие любой символ, который вы выбрали для разделения строки.
Чтобы добавить что-либо только в конец вывода , сделайте это в отдельном echo
:
# code that output something # then, echo 'additional data'
Или, модифицируя мои примеры сверху:
set -- * 'additional data' printf '%s\n' "$@"
а также
names=( * 'additional data' ) printf '%s\n' "${names[@]}"
Или же…
set -- * set -- "$@" 'additional data' printf '%s\n' "$@"
а также
names=( * ) names+=( 'additional data' ) printf '%s\n' "${names[@]}"