トークン化はPOSIXの一部ですか?

トークン化はPOSIXの一部ですか?

私はBashに単語分離機能があることを知っていますが、zshにはありません。

つまり、sh単語分離機能があるのでしょうか、それともBashだけの機能なのでしょうか?移植可能なシェルスクリプトを作成するには、単語の分離を考慮する必要がありますか、それとも別のシェルによって追加された非標準的なものですか?

ベストアンサー1

暗黙的なトークン化、つまり引用符で囲まれていない変数拡張のトークン化($fooトークン化とは反対)は、"$foo"すべてのPOSIX準拠シェル(より一般的にはすべてのshシェル)が実行する操作です。また、結果をワイルドカードとして表示します。だからこそ変数置換を二重引用符で囲む必要があります。。コマンドの置換も同様です。

POSIXはそれを呼び出します。フィールド分割そしてパス名拡張

Zshは標準sh動作から外れます。引用符のない変数置換については単語分割は行いませんが(引用符なしのコマンド置換では単語分割を実行します)、引用符なしの置換では全くグローブを行いません。 (もちろん、Zshにはこれらの機能がありますが、$=fooトークン化と$~fooグロービングという非常に具体的な機能があります。)Zshはsh互換シェルではなく、sh互換シェルです。合理的に似ていますが、互換性がなく、暗黙の暗黙的な分割が主な偏差の1つです。

Zshには、shのように暗黙的なトークン化やワイルドカードの指定などの操作を実行する互換モード(zsh実行可能ファイルを呼び出すとsh自動的に入力されます)があります。ksh

Bashとkshはsh互換シェルです。 BashにはPOSIXといくつかの非互換性がありますが、それを見つけるにはもう少し詳しく調べる必要があります。暗黙の分割などの重要な問題に対して互換性があります。

(T)cshはまったく異なるシェルファミリーです。構文はshとはかなり異なります。それも死んだので心配する必要はありません。

おすすめ記事