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