Bash: pass zmienna jako pojedynczy parametr / parametr cytowania powłoki
Piszę skrypt bash, który musi przekazać zmienną do innego programu:
./program $variable
Problem polega na tym, że absolutnie konieczne jest przekazanie zmiennej $ jako pojedynczego parametru, co nie ma miejsca, jeśli zawiera białe znaki.
variable=Hello World
./program $variable
-> program receives two arguments: 'Hello' 'World'
Cytowanie go w ogóle nic nie robi (dobrze zrobione, bash devs):
variable=Hello World
./program "$variable"
-> program receives: 'Hello' 'World'
Podwójne cytowanie to szalone rzeczy (dobrze zrobione, bash devs):
variable=Hello World
./program "'$variable'"
-> program receives: "'Hello" "World'"
Czy można to zrobić w prosty sposób? Do licha, czy w ogóle można to zrobić?
Aktualizacja: Dobra, ponieważ problem nie wydaje się bash, oto kilka dodatkowych informacji. Program, do którego przekazuję argumenty, to skrypt Pythona. Bez modyfikowania argumentów w jakikolwiek sposób
print sys.argv
-> ['/usr/bin/program', "'Hello", "World'"]
Jak mogę to naprawić?
Edytować: Nie, nie próbowałem
variable="Hello World"
ponieważ nigdy nie deklaruję zmiennej $. Nie jest deklarowany wewnątrz mojej funkcji bash i nie wolno mi go modyfikować.
Edytować: Dobra, mam to do pracy w ten sposób.
local temp="$variable"
./program "$temp"
Chciałbym jednak wiedzieć, dlaczego tak działa, a nie w inny sposób.