Portál AbcLinuxu, 31. října 2025 05:16
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:
Ř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"
Jak to upravit pro /BIN/SH respektive /bin/sh ?
#!/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
To je sice hezké ale když neobsahuje seq ani expr ?
#!/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 ?
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.
#!/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". :)
for x in "word list" tedy, že množina čísel se do in musí převést na seznam slov.
            
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.