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 odpowiedziTo 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?