私はコンパイラフラグを保存する$variable
ときに引用されていない拡張を使用しましたが、最近はvariable
globのようなメタ文字がまだ拡張されていることがわかりました。*
?
variable
$ f='*'
$ echo $f
foo.bash
とは別にset -f
。
Bashで私が考えることができる最も明確な方法は、read_words
配列名を引数として渡された文字列の内容で埋め、それを使用して${arr[@]}
その文字列を拡張する関数を定義することです。
#!/bin/bash
count() {
printf '%s\n' "$#"
}
read_words() {
IFS=$' \t\n' read -a "$1" <<< "$2"
return 0
}
read_words arr 'a b *'
count "${arr[@]}"
ベストアンサー1
set -f
ワイルドカードなしでフィールド分割を実行する最も便利な方法です。
では、bash
テストでシェルオプションが設定されているかどうかをテストできます-o
。だからあなたはこれを行うことができます:
if [ ! -o noglob ]; then
set -f
trap 'set +f' RETURN
fi
これはシェルオプションnoglob
(の長い名前set -f
)の状態を検出します。設定しないと、トラップが設定されてインストールRETURN
されます。noglob
スクリプトが完了すると、トラップはシェルオプションの設定を解除します。スクリプトソースの場合。スクリプトにソースがない場合、トラップは何もしません。
興味深い点:ソーススクリプトはシェル関数と非常によく似ています。