Почему оболочка игнорирует кавычки в аргументах, передаваемых ей через переменные? [Дубликат]
На этот вопрос уже есть ответ:
Как сохранить команду в переменной в Linux? 4 ответаЭто работает как рекламируется:
# example 1
#!/bin/bash
grep -ir 'hello world' .
Это не так:
# example 2
#!/bin/bash
argumentString="-ir 'hello world'"
grep $argumentString .
Несмотря на'hello world'
будучи заключенным в кавычки во втором примере, grep интерпретирует'hello
как один аргумент иworld'
как еще один, что означает, что в этом случае'hello
будет шаблоном поиска, аworld'
будет путем поиска.
Снова, это происходит только тогда, когда аргументы раскрываются изargumentString
переменная. grep правильно интерпретирует'hello world'
в качестве первого аргумента в первом примере.
Кто-нибудь может объяснить, почему это так? Есть ли правильный способ расширить строковую переменную, которая сохранит синтаксис каждого символа так, чтобы он правильно интерпретировался командами оболочки?