Portál AbcLinuxu, 5. května 2025 01:57
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.