私は過去set -f
に bash でグロブの展開を防ぐために使用していましたが、これは私の Mac ではもう機能しないようです。
$ cat script.sh
#!/bin/bash
echo $0
i=1
for var in $@
do
echo "$i => $var"
((i++))
done
$ set -f
$ ./script.sh *
./script.sh
1 => program
2 => program.cpp
3 => script.sh
set -f
私は出力があることが予想しました
$ ./script.sh *
./script.sh
1 => *
私には何が欠けていて、どうすれば拡大を止めることができますか。
./script.sh
実際にオプションset -f
を設定したシェルとは別のシェル (サブシェルをフォークして実行) でスクリプトを実行しています。スクリプト内に配置して、オプション セットで実行されるようにします。
$ ./script.sh *
./script.sh
1 => *
または、set
オプションを適用して、以下のように現在のシェルでスクリプトをソースにすることもできます。
$ set -f
$ source script.sh *
/usr/bin/bash
1 => *
このクロスサイト リファレンスを参照してください。Bash スクリプトの実行とソースの違いは何ですか? これは、ここで扱っている問題について優れた洞察を提供します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加