Добавить что-то к переменной bash, которая содержит вывод команд

Это-

$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[@]}"