2015-09-24 7 views
1

Из того, что я читал here, он говорит, что «В одинарных кавычках каждый специальный символ, кроме« интерпретируется буквально ». Итак, я думал, что обратная косая черта («\») также интерпретируется буквально.Одиночные кавычки обрабатывают обратную косую черту как специальную в сценариях bash?

Но тогда, когда я пытаюсь использовать его в качестве псевдонима, это как-то по-прежнему получает интерпретируется как специальный символ:

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

... до сих пор работает?

И все же это не делает:

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

Это удивляет меня, потому что я думал, что все дело в одинарных кавычках должно было быть за лени, то есть, когда вы не расширяется любой переменные с $ (потому что это потребует двойных кавычек).

Я действительно сомневаюсь, что источник tldp ошибочен, так есть лучший способ объяснить это? Благодарю.

+2

не имеет ничего общего с кавычками. он имеет отношение к расширению псевдонимов, которое является буквальным значением строки * *. поставьте кавычки только по пути. – user2864740

+0

... что является одной из многих причин, почему вместо псевдонимов следует использовать функции оболочки. http://mywiki.wooledge.org/BashFAQ/080 – rici

+0

все еще .... Меня еще больше озадачивает это: 'alias somefolder = 'cd'/Some path/with spaces/''' не работает, так как i сказал в вопросе. Однако из командной строки 'cd '/ Some path/with spaces /'' * does * работает? – Hunle

ответ

4

Это потому, что псевдоним будет расширен оболочкой, при этом отдельные кавычки будут удалены. Таким образом, после расширения псевдонима у вас будет только

cd /Some path/with spaces/ 

Осталось, что не получится, как вы сказали.

Но в то время как вы используете \, чтобы избежать пробелов, после расширения псевдонима (и удалений одинарных кавычек) оболочка будет иметь следующую работать на:

cd /Some\ path/with\ spaces/ 

, который будет работать, как ожидалось.

+0

Чтобы быть более точным, кавычки уже были удалены при создании псевдонима. – hvd

+0

Спасибо за ваш ответ.Однако, что-то по-прежнему необычно в этом, см. Мой комментарий по моему вопросу. Благодарю. – Hunle

1

Ahh, но псевдоним вы строите это положить ваш единственный цитируемый вар в cd команду, которая задыхается на вашем

cd /Some path/with spaces/ 

потому что cd не знает, что делать с пространством, не ваш баш.

При добавлении \ в строку, как в

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

это cd, что интерпретации \, а не Баш, который является всего лишь посланник.