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