Portál AbcLinuxu, 30. prosince 2025 16:19
for i in *
do
case $i in
to|co|nechci) ;;
*) co_s_tim_chci;;
esac
done
$ ls dalsi GDL olixpre olixpre.tar $ for i in *; do case "$i" in GDL|olixpre);; *) echo $i;esac;done dalsi olixpre.tar
$ ls --exclude=cokoli ls: neznámý přepínač `--exclude=cokoli' Více informací získáte příkazem `ls --help'.a
ls *? Co vám ten počítač udělal? Jen doufám, že nepíšete perly typu for i in `ls *`
#!/bin/bash #========================================== # process every file in current directory # may use "break", "continue" #========================================== for FName in $(ls *.*); do echo $FName # mv $FName $FName.old doneZdenek
*.* uvnitř $(), pak se spustí ls a na svůj stdout pošle totéž, co už jednou bash expandoval a pak to bash znovu musí rozparsovat (ne podle hranic jmen souborů, ale podle IFS takže to navíc může rozseknout soubory s mezerou ve jméně a podobné radosti) a zpracovat jakou parametry příkazového řádku. (Odmyslíme-li si další chybu, že ls *.* nevypíše všechny soubory, ale jen soubory s tečkou v názvu - nejsme v DOSu se jmény souborů 8.3) To znamená spoustu zbytečné práce navíc. Přitom zápis for FName in *; do echo $FName # mv $FName $FName.old doneUdělá totéž, ale mnohem efektivněji. Bash je tak chytrej, že * neexpanduje naráz, ale provádí smyčku for postupně s jednotlivými jmény souborů. Efekt je stejný, ale ušetří se hodně paměti.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.