2016-03-23 3 views
0

Я попытался это:Как избежать цитат в bash?

a="\"Google Chrome\"" 

и я попытался

a="'Google Chrome'" 

, но не идти. Как я могу выполнить? Для этого сценария здесь:

birthBrowser(){ 
    local a 
    if [ $# -eq 0 ] 
    then 
     a="Google Chrome" 
    fi 
    if [ $# -eq 1 ] 
    then 
     a="$1" 
    fi 
    if [ $# -gt 1 ] 
    then 
     a="$1" 
     echo "Too many arguments" 
    fi 
    open -a $a 
} 

кажется, продолжайте читать только часть Chrome, а не лечение «Google Chrome» в качестве одного из аргументов.

Например, open -a "Google Chrome" работает в консоли.

+0

Этот вопрос был дан здесь: http://stackoverflow.com/questions/35586627/how-to-escape-double-quotes-in-bash – Dustin

+1

Экранирование кавычек делает их данными, а не синтаксисом. Если вы буквально не хотите, чтобы кавычки обрабатывались как данные командой open (что, я вам обещаю, вы этого не делаете), вы ** не хотите, чтобы ** избегали кавычек. Вместо этого вам следует избегать расширения. –

+1

@theman, он делает то, о чем вы просите; это просто не то, что вы ** хотите **. Это ускользает от кавычек, о чем вы спрашиваете, как это сделать, но если вы хотите, чтобы 'open' работал правильно, то эти цитаты ** не должны быть экранированы. –

ответ

1

Если предполагаемое поведение идентично этому:

open -a "Google Chrome" 

... то ваш сценарий использование должно выглядеть следующим образом:

a="Google Chrome" 
open -a "$a" 

В приведенном выше использовании, все цитаты синтаксический , тогда как если вы буквально избегаете кавычек как часть строки, то они становятся данными и теряют свое особое значение в качестве синтаксиса.

См. BashFAQ #50 для подробного объяснения того, почему попытка избежать синтаксических котировок - это неправильная вещь.

+0

Это настолько противоречиво, что оно обратно совместимо с чем-то, что было разработано в 1970-х годах. Добро пожаловать в UNIX. –

+0

Bourne. Не полностью * обратная совместимость с Bourne, заметьте - в начале 90-х годов стандарт POSIX sh ушел с принятием '^' как символа канала, но с ограниченным набором исключений. –

+0

Действительно. Bash - это надмножество POSIX sh (в основном, по умолчанию разделяет несколько второстепенных частей, например, спецификация 'echo'), которые Bourne предшествует десятилетиями. Это означает, что имя было выбрано как * милый *, а не быть точным *. –