Dlaczego powłoka ignoruje cudzysłowy w argumentach przekazywanych do niej przez zmienne? [duplikować

To pytanie ma już odpowiedź tutaj:

Jak przechowywać polecenie w zmiennej w systemie Linux? 4 odpowiedzi

To działa jak w reklamie:

# example 1
#!/bin/bash
grep -ir 'hello world' .

To nie:

# example 2
#!/bin/bash
argumentString="-ir 'hello world'"
grep $argumentString .

Pomimo'hello world' ujęte w cudzysłów w drugim przykładzie, grep interpretuje'hello jako jeden argument iworld' jako inny, co oznacza, że w tym przypadku'hello będzie wzorcem wyszukiwania, aworld' będzie ścieżką wyszukiwania.

Znowu dzieje się tak tylko wtedy, gdy argumenty zostaną rozwinięte zargumentString zmienna. grep poprawnie interpretuje'hello world' jako pojedynczy argument w pierwszym przykładzie.

Czy ktoś może wyjaśnić, dlaczego tak jest? Czy istnieje odpowiedni sposób na rozwinięcie zmiennej łańcuchowej, która zachowa składnię każdego znaku, dzięki czemu będzie poprawnie interpretowana przez polecenia powłoki?

questionAnswers(3)

yourAnswerToTheQuestion