1

私がここで読んだことから、「単一引用符内では、' を除くすべての特殊文字が文字どおりに解釈される」と書かれています。それで、バックスラッシュ (「\」) も文字どおりに解釈されると思いました。

しかし、エイリアスで使用しようとすると、どういうわけか特殊文字として解釈されます。

alias somefolder='cd /Some\ path/with\ spaces/'

...まだ動作しますか?

それでも、これはしません:

alias somefolder='cd /Some path/with spaces/'

$一重引用符の全体的なポイントは怠惰のため、つまり、で変数を展開していない場合(二重引用符が必要になるため)のためだと思っていたので、これは私を驚かせます。

tldp ソースが間違っているとは思えないので、これを説明するより良い方法はありますか? ありがとう。

4

2 に答える 2

4

これは、エイリアスがシェルによって展開されるためです。その過程で一重引用符が削除されます。したがって、エイリアスの展開後は、次のようになります

cd /Some path/with spaces/

あなたが言ったように失敗する残り。

ただし\、スペースをエスケープするために使用している間、エイリアスを展開した後 (および単一引用符を削除した後)、シェルは次の操作を行います。

cd /Some\ path/with\ spaces/

これは期待どおりに機能します。

于 2015-09-24T05:53:38.860 に答える
1

ああ、しかし、あなたが構築しているエイリアスは、一重引用符で囲まれた var をcdコマンドに出力しています。

cd /Some path/with spaces/

あなたのバッシュではなく、スペースをどうするかcdわからないからです。

\次のように文字列にを追加すると

'cd /Some\ path/with\ spaces/'

単なるメッセンジャーである bash ではなく、cdを解釈しているのはです。\

于 2015-09-24T05:53:52.503 に答える