トークン化とファイル名拡張子が「[[...]]」の条件式で機能しないのはなぜですか?

トークン化とファイル名拡張子が「[[...]]」の条件式で機能しないのはなぜですか?

Bashリファレンスマニュアルから

単語分割規則:

二重引用符内で発生しないパラメータ拡張、コマンド置換、および算術拡張のシェルスキャン結果噴射

ファイル名拡張子の規則:

単語の分離後、Bash は -f オプションが設定されていない限り、各単語で '*', '?'および「[」文字を検索します(58ページのセクション4.3.1 [組み込み設定]を参照)。これらの文字のいずれかが発生すると、その単語はパターンと見なされ、アルファベット順のリストに置き換えられます。ファイル名パターンマッチ

したがって、パラメータ拡張、コマンド置換、算術拡張の後、二重引用符内の部分を除いて単語の区切りが発生します。

  1. 存在する[[ ... ]]ザイルズそしてジョン1024どちらも単語の区切りとファイル名拡張が適用されないことを示します[[ ... ]]。 BashリファレンスマニュアルまたはPOSIX 7仕様のどのルールが適用されますか?

    • 条件式に二重引用符はありません[[ ... ]]。それでは、単語スプレーを使用するのはどうでしょうか?

    • この-fオプションは設定されていません。ファイル名拡張子が機能しないのはなぜですか?

  2. また、[[ ... ]]単語の分割、ファイル名の拡張、または両方が適用されない他のケースはありますか?どちらか一方または両方が適用されないと思うのと同じ理由がありますか[[..]]

  3. 単語の分割とファイル名の拡張は両方ともすべての状況に適用または適用されないという意味で常に一緒に行われますか?

ベストアンサー1

内部に[[コマンド文書、あなたは見るでしょう

単語分割とファイル名拡張は行われません。[[と]]の間の単語については、チルダ拡張、パラメータおよび変数拡張、算術拡張、コマンド置換、プロセス置換、および引用符の削除を実行します。

(強調は私のもの)

しかもcase氏名免除があります

これ言葉一致を試みる前に、チルダ拡張、パラメータ拡張、コマンド置換、算術拡張、および引用符の削除を実行します。各模様チルダ拡張、パラメータ拡張、コマンド置換、算術拡張を実行します。

特に、単語の分割とファイル名の拡張がありません。

また、変数の割り当て(参照シェルパラメータ)

次の形式のステートメントを使用して変数を割り当てることができます。

name=[value]

もし指定しない場合、変数に空の文字列が割り当てられます。みんな価値チルダ拡張、パラメータおよび変数拡張、コマンド置換、算術拡張、引用符の削除の実行

だからこれは安全です:

a="hello world"
b=$a

単語分割が行われない他の場所:

私のヒント:bashマニュアルで「undergo」という単語を検索してください。

おすすめ記事