Как заменить строки из нескольких слов в кавычках в качестве аргументов?

Я пытаюсь заменить строковую переменную, содержащую несколько слов в кавычках, в качестве параметра команды.

Таким образом, учитывая следующий пример сценария (обратите внимание на -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 , мы передаем строку программе, где некоторые аргументы должны быть заключены в кавычки, например, "*" (которые не должны расширяться оболочкой).

Для пояснения: Я не хочу, чтобы одинарные кавычки добавлялись во время расширения. Как мне этого добиться?

13
задан codeforester 8 June 2018 в 18:56
поделиться