Portál AbcLinuxu, 19. července 2025 20:29
#!/bin/bash
function readCenterGridBox() {
fname=$1;
counter=0;
for i in $(cat $fname); do
result[counter]=$i;
counter = counter + 1;
done
}
dlist=$(find ~/DOC -type d)
for dname in $dlist ; do
position=readCenterGridBox $dname"/cdk.txt"
echo $position[0];
echo -e "\n"
done
Dekuji za odpoved.
Řešení dotazu:
Především: jak přesně zní to chybové hlášení?
Jinak si očividně neděláte těžkou hlavu s mezerami v názvech souborů a adresářů, ale je docela dobře možné, že tam žádné nemáte. A tohle
counter = counter + 1;
nemůže fungovat. Správně můžete použít
counter=$[counter + 1]
případně
: $[counter++]
nebo rovnou
result[$[counter++]]="$i"
nebo dokonce
result[${result[*]}]="$i"
counter
? :-)
position=readCenter...
, který zaprvé asi není to, cos chtěl napsat, a zadruhé do proměnné position uloží string "readCenterGridBox" (po mezeru) a následně se snaží spustit ten cdk.txt soubor, který nemá executable práva, proto ta chyba.
Nicméně podivností a chyb máš v té ukázce výrazně víc. Hned další budou chybějící dvojité závorky u counter+1 (a naopak přebývající mezery u rovnítka tamtéž). Zbytek asi půjde spustit ale rozhodně nebude dělat to, co chceš (at už je to cokoliv :).
~/DOC
vyhledat všechny soubory cdk.txt
a z každého vypsat první slovo? Takto se to ale v shellu nedělá. Pokud by ta adresářová struktura byla plochá, stačilo by např. tohle:
for soubor in ~/DOC/*/cdk.txt; do read w1 w2 <"$soubor"; echo -e "$w1\n"; done
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.