Bashスクリプトで、すべてのファイルを1つの新しいファイルにまとめたいのですが。
たとえば、私のディレクトリには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をエコーしてターミナルでコマンドを実行すると、すべて問題ありません。なぜbashスクリプトで機能しないのですか?)
拡張を実行するタイミングによって異なります。
変数を定義するとき:
$ files=$(echo a*)
$ echo $files
a1 a2 a3
$ echo "$files"
a1 a2 a3
変数にアクセスすると:
$ files=a*
$ echo "$files"
a*
$ echo $files
a1 a2 a3
$
を使用するcat
コマンドにinput_files
がありません。試す
cat $input_files >> out_file.bak
ファイル名に空白が含まれている場合は、さらに注意が必要です。その場合は、配列を使用します。
input_files=( "file with space."*.txt )
cat "${input_files[@]}" >> out_file.bak