41

$PATHアプリケーションで環境変数を解析する必要があります。だから私はどのエスケープ文字が で有効なのか疑問に思っていました$PATH. というテスト ディレクトリを/bin:d作成し、その中に というテスト スクリプトを作成しました funny。絶対パスで呼び出すと実行されます。コロンをエスケープし:て、一重引用符と二重引用符で囲みました。しかし、いつも私が実行すると、それを見つけることができません。CentOS 6 を実行しています。$PATH\'"which funny

4

4 に答える 4

30

これは、POSIX 標準では不可能です。これは特定のシェルの機能ではなく、PATH の処理は C ライブラリの execvp 関数内で行われます。いかなる種類の引用についても規定はありません。

これが、特定の文字 (「移植可能なファイル名の文字セット」にないもの - 例として特にコロンが呼び出されます) を含めることを強く推奨しない理由です。

SUSv7から:

はこのコンテキストの区切り文字であるため<colon>、PATH で使用される可能性のあるディレクトリ名には<colon>文字を含めないでください。

GLIBC execvp のソースも参照してください。strchrnulおよび関数を使用しmemcpyて PATH コンポーネントを処理していることがわかります。エスケープ文字をスキップしたり、エスケープを解除したりすることはまったくありません。

于 2015-03-23T14:59:06.300 に答える
9

関数を見ると、 extract_colon_unit これは不可能に思えます。は:、無条件かつ不可避的にパス セパレータとして使用されます。

まあ、これは少なくともbashには有効です。他のシェルは異なる場合があります。

于 2013-02-02T11:38:22.807 に答える
5

あなたはそれを試すことができmountます

mount /bin:d /bind
PATH=/bind
于 2014-01-08T01:29:51.023 に答える