Мне нужно сохранить некоторые выражения sed в переменной и подставить их в команду sed.
myArgs="-e 's/foo/bar/' -e 's/foo2/bar2/'"
Пока они не работают:
echo "foo" | sed ${myArgs}
# sed: -e expression #1, char 1: unknown command: `''
echo "foo" | sed $(echo ${myArgs})
# sed: -e expression #1, char 1: unknown command: `''
echo ${myArgs}
's/foo/bar/' -e 's/foo2/bar2/'
# 1st -e missing
Расширение параметра интерпретирует первый аргумент -e в переменной.
-e может интерпретироваться как проверка на существование или аргумент для echo.
Как я могу предотвратить это и использовать его буквально для команды sed?
Чтобы уточнить , это просто упрощенная версия команды, которая будет содержать большое количество выражений sed с символами, которые требуют экранирования в регулярном выражении, и я бы предпочел оставить выражения, указанные в кавычках, как есть, и выгружать все выражения sed в команду sed как единую переменную.
Если это невозможно, я буду использовать другой метод, такой как текущие ответы ниже, однако кажется, что должен быть какой-то встроенный метод bash, чтобы не расширять переменную заранее , а вместо этого просто интерпретируйте его как строку, прежде чем она будет использована в последней команде sed.
Фактические аргументы, которые я использую, будут выглядеть примерно так:
-e 's/^>chr1.*/>NC_032089.1_chr1/' -e 's/^>chr2.*/>NC_032090.1_chr2/'
С неизвестными строками