これは例ですhttps://unix.stackexchange.com/a/56846/674
どのタイプの変数が宣言されているかをテストする別のbash関連の方法は、その変数が次にリストされていることを確認することです
${!PREFIX*}
。case " ${!foobar*} " in *" foobar "*) echo "foobar is declared";; *) echo "foobar is not declared";; esac
私が正しい場合は、パラメータを宣言解除するために組み込み
unset
機能を使用してください。このunset
事件は引用文で言うのと同じです。$ unset foobar $ case " ${!foobar*} " in > *" foobar "*) echo "foobar is declared";; > *) echo "foobar is not declared";; > esac foobar is not declared
ただし、
declare
ケースdは次のことを行いません。$ unset foobar $ declare foobar $ case " ${!foobar*} " in > *" foobar "*) echo "foobar is declared";; > *) echo "foobar is not declared";; > esac foobar is not declared
パラメータが宣言されたかどうかをテストする正しい方法ですか?
- そして、
" ${!foobar*} "
パラメータ拡張の前後にスペースがあるのはなぜですか?配列や辞書の場合と変数ですが、配列や辞書ではない場合にもfoobar
機能しますか?
答え1
変数を値(nullかもしれません)として宣言する必要があるようです。
unset foobar; declare foobar=
Case 文は「foobar 宣言済み」を生成します。
*" foobar "*
特定の変数名を検出できるように引用符とスペースを使用します。リスト返された変数名の数${!foobar*}
:$ unset foobar; foobarbaz=1; foobarquz=2 $ echo " ${!foobar*} " foobarbaz foobarquz
Case 文は「foobar が宣言されていません」を生成します。