「圧縮解除」に必要なワイルドカードを含むテキストと変数の組み合わせをエコーしようとすると、次の動作が発生します。
私が言うと:
FILENAME=somefile*.txt
echo "something:" $FILENAME
私は得る:
something: somefile003.txt
これが私が望むものですが、私が言うなら:私が言うなら:
FILENAME=somefile*.txt
echo "something:"$FILENAME
私は得る:
something:somefile*.txt
したがって、引用符と変数の間にスペースがない場合は、ワイルドカードを使用しないようです。スペースを追加せずに*を処理する方法はありますか?
答え1
たとえば、配列を処理するシェルを使用すると、配列にbash
ワイルドカードを使用できます。
FILENAMES=(somefile*.txt)
次のように最初の要素を参照してください。
echo "something:${FILENAMES[0]}"
それともみんなこんなことじゃないか
echo "somethings:${FILENAMES[@]}"
変数を使用するときは、変数を「二重引用符」として使用することをお勧めします。これにより、誤って複数の単語に広がることを防ぐことができます。
答え2
次のように変数を定義してみてください。
FILENAME=\ somefile*.txt; # that is, with a leading space ... and then
echo "something:"$FILENAME;
これにより、変数は次のように補間されます。somefile * .txt
その後、ワイルドカードは次に展開されます。 somefile003.txt
その後、これら2つの引数はechoに渡され、すぐに標準出力に書き込まれます。