Temat: Interpretacja napisów przez shell (ash) w OpenWrt
Kilka różnych przykładów wyjaśniających jak traktowane są napisy które przechodzą przez shell.
Zwykłe wyświetlanie napisów. Z tym nie ma problemu:
root@OpenWrt:~# echo "test"
test
root@OpenWrt:~# echo 'test'
test
Różnica jest w traktowaniu napisów które są w cudzysłowie - wtedy shell stara się zinterpretować i podstawić zmienne, więc np. jak dodamy znak $ to shell będzie traktował to jako zmienną:
root@OpenWrt:~# echo '$test'
$test
root@OpenWrt:~# echo "$test"
<puste>
Tak wygląda sytuacja jak nie ma zmiennej test. Jak będzie to drugi przypadek odpowiednio zinterpretuje zmienną, np.
root@OpenWrt:~# export test=1234
root@OpenWrt:~# echo '$test'
$test
root@OpenWrt:~# echo "$test"
1234
Jeżeli nie chcemy aby napis w cudzysłowie był traktowany jako zmienna należy dać tzw. znak escape czyli \ w tym przypadku:
root@OpenWrt:~# export test=1234
root@OpenWrt:~# echo "\$test"
$test
Jednocześnie pamiętajmy że ' tego nie potrzebuje i wyświetla tekst tak jak jest:
root@OpenWrt:~# export test=1234
root@OpenWrt:~# echo '\$test'
\$test
Znak escape ma też zastosowanie gdy chcemy cudzysłów lub apostrof umieścić wewnątrz ciągu znaków:
root@OpenWrt:~# echo "ala\"ma kota"
ala"ma kota
root@OpenWrt:~# echo "ala'ma kota"
ala'ma kota
root@OpenWrt:~# echo "ala\'ma kota"
ala\'ma kota
root@OpenWrt:~# echo 'ala\"ma kota'
ala\"ma kota
root@OpenWrt:~# echo 'ala"ma kota'
ala"ma kota
root@OpenWrt:~# echo 'ala'\''ma kota'
ala'ma kota
Jeszcze kilka przykładów: shell musi wiedzieć co jest zmienną a co nie jest:
root@OpenWrt:~# export test=1234
root@OpenWrt:~# echo "ala"$test"ma kota"
ala1234ma kota
root@OpenWrt:~# echo "ala$testma kota"
ala kota
root@OpenWrt:~# echo "ala $testma kota"
ala kota
root@OpenWrt:~# echo "ala $test ma kota"
ala 1234 ma kota