このコメントに返信する場合:
これで、2 つの「:」が独立していることがわかりました。そのため、それらに関するドキュメントが見つかりませんでした。この場合、最初のものが必要ですか?
仕様の次の段落に初めて気付きました。
前に示したパラメーター展開では、フォーマットで <colon> を使用すると、未設定または null のパラメーターのテストが行われます。<colon> を省略すると、設定されていないパラメータのテストが行われます。パラメータが '#' でコロンが省略されている場合、アプリケーションは単語が指定されていることを確認する必要があります (これは、文字列の長さの拡張に関するあいまいさを避けるために必要です)。
bashリファレンスマニュアルで一致する説明を見ました:
以下に説明する形式 (例: ':-') を使用して部分文字列の展開を実行しない場合、Bash は未設定または null のパラメーターをテストします。コロンを省略すると、設定されていないパラメーターのみがテストされます。別の言い方をすれば、コロンが含まれている場合、オペレーターはパラメーターの存在とその値が null でないことの両方をテストします。コロンを省略すると、演算子は存在のみをテストします。
前と私は、これらの拡張のコロン バージョンとの違いを理解しています。
今私を混乱させたのは、仕様からの次の文です。
パラメータが '#' でコロンが省略されている場合、アプリケーションは単語が指定されていることを確認する必要があります (これは、文字列の長さの拡張に関するあいまいさを避けるために必要です)。
が指定されていない場合、ここでどのような曖昧さが生じる可能性があるのか わかりませんword
。
拡張シジルはシェル変数名では有効ではないため、単一文字の変数名を開始することはできません。それらが可能であれば、 of を使用するparameter
と、変数の長さを意味するのか、 などの代替展開を意味するのかがわからないため、コロンなしで#
は常にあいまいになります。${#+foo}
foo
#
ここで何が欠けていますか?word
それが存在することを保証する必要があるあいまいさは何ですか? (word
つまり、この展開に含まれていないことは明らかに役に立ちませんが、それは同じことではありません。)