Использование двойных и одинарных кавычек в скрипте bash для вызова программы - PullRequest
0 голосов
/ 13 июня 2018

У меня есть скрипт bash, который принимает пару аргументов.Этот скрипт выполняет некоторую работу, а затем открывает другую программу, используя эти два аргумента.Чтобы открыть эту программу, команда требует использования как одинарных, так и двойных кавычек, например:

myprogram -a value1 -b 'Main("value2")'

Но я не могу понять, как это сделать в bash.

Когда япросто поместите это в мой скрипт:

myprogram -a $1 -b 'Main("$2")'

Переменная $ 2 не раскрывается.

Есть какие-нибудь подсказки, как этого добиться?Спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

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

myprogram -a "$1" -b "Main(\"$2\")"

или

myprogram -a "$1" -b 'Main("'"$2"'")'

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

'Main("'"$2"'")' - это конкатенация трех строк: Main(", указанное в кавычках значение $2 и "), в то время как "Main(\"$2\")" - это просто одинарная строка в двойных кавычках с парой экранированных двойных кавычек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...