ファイルグローバル拡張子が抑制されない理由

ファイルグローバル拡張子が抑制されない理由

次のスクリプトがありますmy.sh

echo $@

これでファイルのグローバル拡張を見たいので、これが好きでうまくいきます。

$ bash my.sh *
$ f1 f2 my.sh

次に、次に説明する技術を使用して拡張を抑制しようとしています。この回答:

$ bash my.sh "*"
$ bash my.sh \*

ただし、すべてのファイルの一覧が出力されます。なぜ?

ベストアンサー1

スクリプトが最初に呼び出されたとき

$ bash my.sh *

ファイル名のグロービングは、スクリプトを呼び出す前にシェルで実行されます。

2番目にスクリプトを呼び出すとき

$ bash my.sh "*"

ファイル名のグロービングは、実行時にスクリプトで行われますecho $@

これを防ぐには、$@行の周りに二重引用符を入れてください。

echo "$@"

追加資料:bash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク

おすすめ記事