コマンド出力を保持するbash変数にいくつかのコンテンツを追加します。

コマンド出力を保持するbash変数にいくつかのコンテンツを追加します。

これ-

$a=`ls` | do something | etc. | etc. | etc...
echo "$a"

これを考えると -

file1
file2
file3

しかし、その変数の末尾に何かを追加したいので試してみました。

a=${a}\nfile4

しかし理解する--

file1
file2
file3nfile4   # wrong!

答え1

Bashでは、変数に追加を使用できますvar+=value。しかし、問題はそれではなく改行文字を生成することです。最も簡単な方法は、$'..'バックスラッシュエスケープを改行文字として解釈する引用符を使用することです\n

a+=$'\nfile4'

答え2

現在のディレクトリのファイルリストのみを取得するには、各名前に文字列を追加してください。

set -- *
printf '%s-somestring\n' "$@"

またはbash配列を使用して

names=( * )
printf '%s-somestring\n' "${names[@]}"

配列、位置引数配列(上記の最初の例、すべてのPOSIXシェルで動作)、またはarrayを使用することが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[@]}"

答え3

エコを試してみませんか?

a=$(echo -e "${a}\nfile")

関連情報