1

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
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

2

Odp: Interpretacja napisów przez shell (ash) w OpenWrt

Widze ze moj case spowodowal ten post :-)

3

Odp: Interpretacja napisów przez shell (ash) w OpenWrt

Wydrukować, oprawić i na ścianę!

4 (edytowany przez m80 2014-05-10 15:36:28)

Odp: Interpretacja napisów przez shell (ash) w OpenWrt

A wielokrotne podstawienie, coś w tym rodzaju:

sed -e 's/dog/DOG/g; s/cat/CAT/g'

jest możliwe przy pomocy shell'a?

5

Odp: Interpretacja napisów przez shell (ash) w OpenWrt

m80 napisał/a:

A wielokrotne podstawienie, coś w tym rodzaju:

sed -e 's/dog/DOG/g; s/cat/CAT/g'

jest możliwe przy pomocy shell'a?

Przynajmniej częściowo, patrz poradnik obok: http://eko.one.pl/forum/viewtopic.php?p … 51#p108551

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

6

Odp: Interpretacja napisów przez shell (ash) w OpenWrt

Zanim na scianę, to do korekty linia:
"Jednocześnie pamiętajmy że ' nie tego nie potrzebuje i wyświetla tekst tak jak jest, więc:"

no i brakuje adekwatnego podpisu:
Wielki Nauczyciel, Przyjaciel Dzieci, Słońce Internetu ; )

7

Odp: Interpretacja napisów przez shell (ash) w OpenWrt

A propos

Cezary napisał/a:

Jeszcze kilka przykładów: shell musi wiedzieć co jest zmienną a co nie jest:

można też zapisać:

echo "ala${test}ma kota"
ala1234ma kota

8

Odp: Interpretacja napisów przez shell (ash) w OpenWrt

To nie miał być poradnik o wszystkich możliwych sposobach. Nadal wierzę w inteligencję czytelników i to że sięgną do manuala jak im będzie mało.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.