Я пытаюсь подставить строковую переменную, содержащую несколько цитированных слов, в качестве параметра для команды.
Таким образом, в следующем примере script (Обратите внимание на -x в shebang, что заставляет вывод записываться в 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
Строка 2 показывает, что фактически передается команде; bash добавляет одинарные кавычки к каждому слову в строке. Если я вместо этого цитирую "$ myArg", то это происходит, но для всей строки, а не для каждого слова.
Теперь представьте, что вместо echo
мы передаем строку в программу, где некоторые из аргументов должны быть кавычками, например "*"
(которые не должны быть расширены оболочкой).
Чтобы уточнить, я не хочу, чтобы одиночные кавычки были добавлены вообще во время расширения. Как я могу это достичь?