変数にアスタリスクを使用する

変数にアスタリスクを使用する

bashスクリプトのすべてのファイルを新しいファイルに入れたいです。

たとえば、私のディレクトリには3つのファイルがあります: - file_a.txt - ファイルb.txt - file(c).txt

次のように書くとうまくいきます。

cat "file"*".txt" >> out_file.bak

いいえ、変数を使用してより柔軟でクリーンにしたいと思います。

input_files="file"*".txt"
cat $input_files >> out_file.bak

残念ながら、これは機能しません。問題はなぜですか? (input_filesをechoして端末でコマンドを実行すると、すべてが正常です。それでは、なぜbashスクリプトでは機能しないのですか?)

答え1

使用中のコマンドにAがありません$。努力するcatinput_files

cat $input_files >> out_file.bak

答え2

拡張したい時期によって異なります。

変数を定義するとき:

$ files=$(echo a*)
$ echo $files
a1 a2 a3
$ echo "$files"
a1 a2 a3

変数にアクセスするとき:

$ files=a*
$ echo "$files"
a*
$ echo $files
a1 a2 a3

答え3

ファイル名にスペースが含まれている場合は、さらに注意が必要です。この場合は配列を使用してください。

input_files=( "file with space."*.txt )
cat "${input_files[@]}" >> out_file.bak

関連情報