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がありません$
。努力するcat
input_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