パターンに一致するすべての入力にワイルドカード入力を使用したいと思います。例:
$ 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
- I'd like to see it の代わりにfile1.txt
(実際に実行しない限り./file_lister.sh *.txt
) です。
他の人がコメントで提案したように印刷するにはみんな最初の主張よりも多くのことができます。最も簡単な方法は、$1
(最初のパラメータ)を$@
(すべてのパラメータ)に変更することです。
#!/bin/bash
printf '%s\n' "$@"
バラよりスタックオーバーフローに関するこの質問スクリプトのパラメータ処理に関する追加情報