web-dev-qa-db-ja.com

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

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スクリプトで機能しないのですか?)

2
netblognet

拡張を実行するタイミングによって異なります。

変数を定義するとき:

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

変数にアクセスすると:

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

$を使用するcatコマンドにinput_filesがありません。試す

cat $input_files >> out_file.bak
4
Eirik Fuller

ファイル名に空白が含まれている場合は、さらに注意が必要です。その場合は、配列を使用します。

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