1

現在、いくつかのシェル スクリプトのクリーンアップに取り組んでいます。そうしているうちに、次のようなものに出くわしました。

if [ ${#VARA} -eq 0 ] || [ ${#$VARB} -eq 0 ] || [ ${$VARC} -eq 0 ]; then
  ...
fi

ご覧のとおり、ここでは${#V}${#$V}、およびの 3 つの異なるタイプの変数が使用されています${$V}。それぞれの解説をお願いします。(さらに、 Shellcheck は最後の 1 つについて不平を言っています。)

4

1 に答える 1

1

この構文は、POSIX (当時は Bash) シェル パラメーター展開の一部です。変数の文字数をカウントします:

$ myvar="foo" && echo ${#myvar}
3

最後の 2 つは有効な構文では${#$VARB}あり${$VARC}ません。この方法で変数を宣言することはできません。

あなたと非常によく似ているのは、またはとの間接参照に使用される${$VARC}有効な です。この構文は、リテラル文字列 " " (の場合) を参照します。@chepnerが言及したように、 eval のため、使用することはお勧めしません。Bash 2.0 では、はるかに好ましい代替手段である間接変数参照の構文が導入されました。\$$myvarevalecho$foomyvar="foo"${!myvar}

注 : シェル変数と混同しないように、変数名には大文字を使用しないでください。シェル変数も慣例により大文字になっています。

于 2016-03-25T06:55:03.293 に答える