Это работает как рекламируемый:
# 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' как один аргумент в первом примере.
Может кто-нибудь объяснить, почему это? Есть ли способ расширить строковую переменную, которая сохранит синтаксис каждого символа, чтобы он был правильно интерпретирован командами оболочки?
