Bash wyświetla pojedyncze cudzysłowy, aby pokazać polecenie, które jest poprawną składnią wejściową. Nie jest uruchomione polecenie, które zawiera te pojedyncze cudzysłowy w parametrze ssh
polecenia.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
mówi, że ostatnie 4 parametry polecenia ssh są "sudo
, /home/pi/shared/blink.sh
, 27
i off"
.
Na zdalnym hoście demon ssh łączy słowa poleceń ze spacjami jako separator, więc wykonywane polecenie zdalne jest
"sudo /home/pi/shared/blink.sh 27 off"
Próba wykonania polecenia o nazwie sudo /home/pi/shared/blink.sh 27 off
, która oczywiście nie istnieje.
Usuń podwójne cudzysłowy z definicji testvar
.
Tutaj nie ma to znaczenia, ale prawdopodobnie ma to znaczenie w twoim prawdziwym przypadku: zamiast ${testvar}
pisać "$testvar"
(lub "${testvar}"
jeśli chcesz, ale nawiasy klamrowe są opcjonalne). Zawsze umieszczaj podwójne cudzysłowy wokół podstawień zmiennych, chyba że wiesz, dlaczego musisz je pominąć. "$testvar"
rozwija się do wartości zmiennej testvar
, a $testvar
gdy nie jest cudzysłowem, traktuje wartość testvar
jako listę wzorców globu oddzieloną spacjami.
Gilles „SO- przestań być zły”
źródło
Shell dzieli wartość zmiennej na słowa. Cytuj dwukrotnie, aby zapobiec podziałowi. Zobacz różnicę:
źródło