Почему оболочка игнорирует кавычки в аргументах, передаваемых ей через переменные? [Дубликат]

На этот вопрос уже есть ответ:

Как сохранить команду в переменной в 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' в качестве первого аргумента в первом примере.

Кто-нибудь может объяснить, почему это так? Есть ли правильный способ расширить строковую переменную, которая сохранит синтаксис каждого символа так, чтобы он правильно интерпретировался командами оболочки?

Ответы на вопрос(3)

Ваш ответ на вопрос