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