シェル スクリプトで複数のイベントにワイルドカードを使用するにはどうすればよいでしょうか?

シェル スクリプトで複数のイベントにワイルドカードを使用するにはどうすればよいでしょうか?

ワイルドカードを使用して、パターンに一致するすべての入力をフィードします。例:

$ cat file_lister.sh
echo $1

$ ls *.txt
file1.txt
file2.txt
file3.txt

$ ./file_lister.sh ./*.txt
file1.txt

しかし、私はスクリプトが印刷されることを期待していました

file1.txt
file2.txt
file3.txt

答え1

スクリプトを実行すると、次のようになります。

$ ./file_lister.sh ./*.txt

シェル./*.txtは に展開される./file1.txt ./file2.txt ./file3.txtため、展開後には実際に実行されるのは以下です。

$ ./file_lister.sh ./file1.txt ./file2.txt ./file3.txt

スクリプトは最初の引数を出力します:

echo $1

$1は、スクリプトに渡される最初の引数に対応します。この場合は./file1.txt、 ではなく が表示されるはずですfile1.txt(実際に を実行した場合を除く./file_lister.sh *.txt)。

他の人がコメントで示唆しているように、印刷したい場合は全て最初の引数の代わりに引数の一部を変更する場合、できることはいくつかあります。最も簡単なのは、$1(最初の引数) を$@(すべての引数) に変更することです。

#!/bin/bash
printf '%s\n' "$@"

見るStack Overflowのこの質問スクリプト内で引数を処理する方法の詳細については、こちらをご覧ください。

関連情報