Portál AbcLinuxu, 5. května 2025 01:57

Dotaz: FOR proč nefunguje (kde je chyba)

pepe_ avatar 9.9.2012 16:18 pepe_ | skóre: 48
FOR proč nefunguje (kde je chyba)
Přečteno: 431×
Odpovědět | Admin

Ahojky , potřebuji vysvětlit FOR :

 

a="Zkouska psani textu" ; b=(${#a}) ; for i in {1..b} ; do sleep .02 ; echo -en "${a:i-1:1}" ; done ; echo -en "\n"

Tnefunguje s chybou :  bash: a: {1..b}: syntaktická chyba: očekáván operand (chybný token je „{1..b}“)

 

Funguje jen

a="Zkouska psani textu" ; b=(${#a}) ; for i in $(seq $b) ; do sleep .02 ; echo -en "${a:i-1:1}" ; done ; echo -en "\n"

 

Jak zadat do FORu        for i in {1..b}  aby to fungoval jak má ?

 

Děkuji.


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

pepe_ avatar 9.9.2012 16:30 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)
Odpovědět | | Sbalit | Link | Blokovat | Admin

Řešení ikdyž podivné

 

a="Zkouska psani textu" ; b=(${#a}) ; for (( i=1 ; $i-$b-1 ; i=$i+1 )) ; do sleep .02 ; echo -en "${a:i-1:1}" ; done ; echo -en "\n"

pepe_ avatar 9.9.2012 16:39 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)

Jak to upravit pro /BIN/SH  respektive /bin/sh  ?

9.9.2012 18:28 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)
#!/bin/sh

a="Zkouska psani textu"
b=`expr length "$a"`

for i in `seq 1 $b`
do
sleep .02
part=`expr substr "$a" "$i" 1`
echo -n "$part"
done

echo
pepe_ avatar 9.9.2012 19:34 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)

To je sice hezké ale    když neobsahuje  seq  ani expr ?

9.9.2012 19:56 l4m4
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)
seq je GNU, ale expr je POSIX.1, tudíž neobsahuje-li systém expr, není to plnohodnotný unixový systém a je zapotřebí prozkoumat a popsat možnosti, co vlastně k disposici je. Bez toho se nedá radit, protože POSIX je dost základní předpoklad, který každý normálně činí implicitně...
9.9.2012 22:52 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)
#!/bin/sh
  
a="Zkouska psani textu"
b=`expr length "$a"`
i=1
 
while [ $i -le $b ]
do
sleep .02
part=`expr substr "$a" "$i" 1`
echo -n "$part"
i=$((i+1))
done
  
echo

Je to bez pouzitia seq , ale ako odstranit resp. cim nahradit expr , tak to teda nemam sajn. Takze, co povedal l4m4, tak to plati. Bez znalosti dostupnosti sady nastrojov je tazko cokolvek spravit. A osobne som ani netusil, ze expr moze byt nedostupny. Urcite to nesposobovala nedostupnost seq ?

pepe_ avatar 10.9.2012 19:18 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)

Máš pravdu , EXPR má i router .

 

/bin:
boot.sh             convert_forward.sh  df                  gzip                login               mv                  sleep
busybox             convert_mac.sh      disconnect.sh       hostname            ls                  netstat             tar
cat                 convert_tf.sh       dmesg               ip                  mkdir               ping                true
chmod               cp                  echo                kill                more                ps                  umount
chown               date                false               lash                mount               rm                  uname
connect.sh          dd                  grep                ln                  msh                 sh                  vi

/sbin:
approconfig  auth         calc         ifconfig     init         iwcontrol    iwpriv       reboot       syslogd      tcpdump      vnstat
arp          brctl        flash        ifstat       iptables     iwlist       klogd        route        tc           udhcpc       watchdog

/usr/bin:
[           clear       cut         expr        ftpget      killall     nslookup    reset       test        tr          uptime
arping      crontab     dumpleases  free        ftpput      logger      renice      telnet      top         traceroute  wc

/usr/sbin:
crond          dnsmasq        dropbearkey    ftpd           inetd          pppoe-relay    telnetd        udhcpd
dhcrelay       dropbear       dropbearmulti  httpd          pppd           rdate          tinysnmpd

a to se dá považovat za minimalistický linux. Takže vyřešeno i SH. Děkuji.

9.9.2012 19:04 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)
#!/bin/bash


a="Zkouska psani textu"
#b=(${#a})
b=${#a}

# $i-$ib-1 ??? nijako neovplyvni chod
# for (( i=1 ; $i-$b-1 ; i=$i+1 ))
for (( i=0; i<$b; i++ ))
do 
	sleep .02
	# parameter -e pre echo nema zmysel v tomto prikaze
	# i-1 ??? tak preco nezacnes for cyklus s i=0 ?
	#echo -en "${a:i-1:1}"
	echo -n "${a:$i:1}"
done

# na jednej strane zakazes odsadenie na novy riadok a na druhej
# strane povolis interpretaciu spatneho lomitka a zadas znak
# pre novy riadok, aby sa spracoval
# Nedava to moc logiku. :)
#echo -en "\n"
echo

Som si dovolil opravit tvoje, bo neviem, ale bolo to prinajlepsom "zvlastne". :)

pepe_ avatar 9.9.2012 19:32 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)

a="Zkouska psani textu" ; b=${#a} ; for (( i=0; i<$b; i++ )) ; do sleep .02 ; echo -n "${a:$i:1}" ; done ; echo -en "\r"

 

To tvoje je hezčí (děkuju).

9.9.2012 16:33 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tedy v bashi moc nepíšu, ale mám dojem, že syntax je for x in "word list" tedy, že množina čísel se do in musí převést na seznam slov.
9.9.2012 17:18 l4m4
Rozbalit Rozbalit vše Re: FOR proč nefunguje (kde je chyba)
Žádná množnina čísel v bashi neexistuje, akorát konstrukce, kterou expanduje na seznam čísel (slov, chceš-li).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.