Я пытаюсь подставить строковую переменную, содержащую несколько слов в кавычках, в качестве параметра команды.
Таким образом, учитывая следующий пример сценария (обратите внимание на -x в шебанге, который приводит к записи вывода в stderr),
#!/bin/bash -x
myArg="\"hello\" \"world\""
echo "string is:" $myArg
exit
Что дает нам,
+ myArg='"hello" "world"'
+ echo 'string is:' '"hello"' '"world"'
string is: "hello" "world"
+ exit
Вторая строка показывает, что на самом деле передается команде; bash добавил одинарные кавычки к каждому слову в строке. Если вместо этого я вместо этого цитирую «$ myArg», то же самое происходит, но для всей строки, а не для каждого слова.
Теперь представьте, что вместо echo
мы передаем строку в программу, где некоторые аргументы должны быть в кавычках, например, "*"
(который не должен расширяться оболочкой).
Чтобы уточнить, я не хочу, чтобы во время расширения вообще добавлялись одинарные кавычки. Как мне этого добиться?