Краткий ответ: см. BashFAQ # 50 («Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!»).
Длинный ответ: Поместить команды (или части команд) в переменные, а затем вернуть их нетронутыми, сложно. Когда оболочка раскрывает переменную в командной строке, если переменная заключена в двойные кавычки, она не анализируется; если это не было в кавычках, пробелы в нем анализируются как разрывы аргументов, но кавычки и escape не анализируются. В любом случае, размещение кавычек в значении переменной ничего не дает.
Обычно лучший способ сделать это - использовать массив вместо простой текстовой переменной:
echoне показывает, что вы думаете. Попытайтесь printargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS"понять, почему ни один из этих вариантов не работает.
Ответы:
Краткий ответ: см. BashFAQ # 50 («Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!»).
Длинный ответ: Поместить команды (или части команд) в переменные, а затем вернуть их нетронутыми, сложно. Когда оболочка раскрывает переменную в командной строке, если переменная заключена в двойные кавычки, она не анализируется; если это не было в кавычках, пробелы в нем анализируются как разрывы аргументов, но кавычки и escape не анализируются. В любом случае, размещение кавычек в значении переменной ничего не дает.
Обычно лучший способ сделать это - использовать массив вместо простой текстовой переменной:
источник
Eval это еще один вариант:
Смотрите также:
источник
Я не вижу проблемы:
Может быть, вам нужно снова процитировать значение:
источник
echo
не показывает, что вы думаете. Попытайтесьprintargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS"
понять, почему ни один из этих вариантов не работает.