Portál AbcLinuxu, 9. května 2025 05:34
píši si jednořádkový příkaz, ale narazil jsem na problém. Vysvětlí mi někdo, jaktože toto pracuje:
#!/bin/sh if [ 0 ] ; then echo jop; fi exit 0
Ale v řádce ne?
# if [ 0 ] ; then echo jop; fi
A jak to tedy mám správně zapsat, aby byl stejný výsledek?
Zkoušel jsem různě uvozovat backslashem, ale asi nemůžu najít správnou kombinaci
[petr@nt ~]$ cat pokus.sh #!/bin/sh if [ 0 ]; then echo jop ; fi [petr@nt ~]$ ./pokus.sh jop [petr@nt ~]$Jinak viz: BASH - III
[petr@nt ~]$ if [ 0 ]; then echo "jop"; fi
if [ 0 ]; then echo "kkt"; fi
find . -type f -exec if [ 0 ] ; then echo jop ; fi \;
find . -name "*.txt" -exec bash -c 'if [ 0 ] ; then echo jop ; fi' \;
[petr@nt ~]$ if [ 0 ]; then echo "jop"; fi jop [petr@nt ~]$
jop
a…a jop
.
$(command)
neuspějete (Vyjma Oracle Solaris 11 Express, kde /*bin/sh je link na KSH93).
Nejen Linuxem živ jest člověk, pokud to není nezbytně nutné, není od věci udržet si maximální kompatibilitu. V tomto případě např. pokud nezbytně nepotřebuji vnořené příkazy, použiji `command`
, ne $(command)
(i když zde by mohl padnout ještě estetický argument a samozřejmě otázka čitelnosti).
Já osobně pointu pisatele chápu jako upozornění, že není dobré bezhlavě věřit, že vše, na co jsem v Linuxu zvyklý mi bude všude fungovat, když použiji /bin/sh. Pokud mi jde o bash syntaxi, lépe neříkat #!/bin/sh
, ale #!/bin/bash
, protože výslovně vyjádřím to, co jsem zřejmě předpokládal. Prostě rozšiřoval obzory a to je podle mě dobře, ne špatně.
Tohle už není záležitost shellu, ale obvykle je dobrým zdrojem zábavy posadit Linuxového uživatele/admina před Solaris a říct mu, by zabil všechny procesy s daným jménem. ;)
Minimálně na Solarisu … třeba zrovna s $(command)
neuspějete … Nejen Linuxem živ jest člověk
Ta konstrukce je součástí POSIX specifikace, takže je-li tomu tak, je to jednoznačně chyba Solarisu.
$ /bin/sh $ uname -sr SunOS 5.10 $ echo $(ls) syntax error: `(' unexpected $
DASH is a POSIX-compliant implementation of /bin/sh that aims to be as small as possible.A blbe to pochopil :-P
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.