Я пытаюсь заменить строковую переменную, содержащую несколько слов в кавычках, в качестве параметра команды.
Таким образом, для следующего примера сценария (обратите внимание на -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
мы передаем строку программе, в которой некоторые аргументы должны быть заключены в кавычки, например "*"
(которые не должны раскрываться оболочкой).
Чтобы уточнить, я не хочу, чтобы одинарные кавычки добавлялись во время расширения. Как я могу этого добиться?
eval
, не имеет большого значения, содержит ли переданная программе строка"*"
или*
. - person sorpigal   schedule 28.02.2012-x
в shebang, что приводит к регистрации вывода. - person user123444555621   schedule 28.02.2012