ワイルドカードを使用して、パターンに一致するすべての入力をフィードします。例:
$ 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のこの質問スクリプト内で引数を処理する方法の詳細については、こちらをご覧ください。