2

このコメントに返信する場合:

これで、2 つの「:」が独立していることがわかりました。そのため、それらに関するドキュメントが見つかりませんでした。この場合、最初のものが必要ですか?

仕様の次の段落に初めて気付きました。

前に示したパラメーター展開では、フォーマットで <colon> を使用すると、未設定または null のパラメーターのテストが行​​われます。<colon> を省略すると、設定されていないパラメータのテストが行​​われます。パラメータが '#' でコロンが省略されている場合、アプリケーションは単語が指定されていることを確認する必要があります (これは、文字列の長さの拡張に関するあいまいさを避けるために必要です)。

bashリファレンスマニュアルで一致する説明を見ました:

以下に説明する形式 (例: ':-') を使用して部分文字列の展開を実行しない場合、Bash は未設定または null のパラメーターをテストします。コロンを省略すると、設定されていないパラメーターのみがテストされます。別の言い方をすれば、コロンが含まれている場合、オペレーターはパラメーターの存在とその値が null でないことの両方をテストします。コロンを省略すると、演算子は存在のみをテストします。

前と私は、これらの拡張のコロン バージョンとの違いを理解しています。

今私を混乱させたのは、仕様からの次の文です。

パラメータが '#' でコロンが省略されている場合、アプリケーションは単語が指定されていることを確認する必要があります (これは、文字列の長さの拡張に関するあいまいさを避けるために必要です)。

が指定されていない場合、ここでどのような曖昧さが生じる可能性があるのか​​ わかりませんword

拡張シジルはシェル変数名では有効ではないため、単一文字の変数名を開始することはできません。それらが可能であれば、 of を使用するparameterと、変数の長さを意味するのか、 などの代替展開を意味するのかがわからないため、コロンなしで#常にあいまいになります。${#+foo}foo#

ここで何が欠けていますか?wordそれが存在することを保証する必要があるあいまいさは何ですか? (wordつまり、この展開に含まれていないことは明らかに役に立ちませんが、それは同じことではありません。)

4

1 に答える 1

5

-シェルの特別なパラメータでもあり、その値は現在設定されているシェル オプションを示す文字列です。例えば、

$ echo $-
himBH

${#parameter}パラメータの長さの構文です。

$ foo=bar
$ echo ${#foo}
3

したがって、式${#-}はあいまいです: の値の長さですか$-、それとも が空の場合$#は空の文字列に展開されますか? (可能性は低いですが、$#は常に整数であり、設定を解除することはできませんが、構文的には有効です。)${#-}の長さに拡張することであいまいさを解決する必要があることを意味する仕様を解釈します$-(これは、ほとんどのシェルが行うようです)。

于 2015-05-08T16:00:41.867 に答える