Чтобы ответить на вопрос literal, вы можете использовать обратную косую черту, чтобы избежать буквенных двойных кавычек в вашей команде. Однако, по причинам, указанным в BashFAQ #50, это чрезвычайно плохая практика:
# Avoid this absent a very good reason
grep_cmd_str="grep -Po '(?<=Fingerprint=)[^\"]*'"
eval "$grep_cmd_str" <file1.txt # eval is necessary, with all the issues that implies
Лучше практика, когда вам нужно хранить простую команду (без перенаправлений или другие конструкции оболочки) [1] в переменная должна использовать массив [2], а не скалярную переменную, чтобы держать свои аргументы:
# Use this principally if you need to dynamically build up an argument list
grep_args=(grep -Po '(?<=Fingerprint=)[^"]*')
"${grep_args[@]}" <file1.txt
Если у вас нет каких-либо constra Интс, которые требуют, чтобы использовать любой из указанных выше, рассмотрим функцию (которая действительно позволяет переназначения и оболочки строит так долго, как они зашиты):
# Use this whenever possible, in preference to the above
grep_fp() { grep -Po '(?<=Fingerprint=)[^"]*' "[email protected]"; }
grep_fp <file1.txt
[1] - Не оценки оболочки В этом контексте конструкцией является функция безопасности: она защищает вас от вредоносных имен файлов или аналогичного содержимого в значениях, которые были заменены на значение, которое вы используете в качестве команды.
[2] - Обратите внимание, что массивы недоступны в POSIX sh, на которые также указан ваш вопрос. Тем не менее, подобная функциональность доступна путем переопределения "[email protected]"
(предположительно в ограниченной области, такой как функция, так что ее исходное значение сохраняется).
Это, возможно, дублирующее http://stackoverflow.com/questions/2005192/how-to-execute-a-bash-command-stored-as-a-string-with-quotes-and-asterisk –
.. .btw, bash и POSIX sh отличаются некоторыми довольно уместными способами (оболочка Bourne отличается еще больше, но не присутствует на том, что когда-либо отправляла Red Hat, поэтому ваша маркировка исключает ее). Я включил в свой ответ только раздел, основанный на bash, но если бы вы только отметили один из двух, было бы понятнее, приемлемо ли это. –