Portál AbcLinuxu, 9. května 2025 06:22

Dotaz: cyklus for in

7.3.2011 11:04 Kamil.Plech
cyklus for in
Přečteno: 317×
Odpovědět | Admin
Dobrý den, mám dotaz ohledně cyklu "for in".

při rekurzivním procházení adresářů mi cyklus bezproblémů běží:

funkce()

{

for na_co_jsem_narazil in *

do

if [ -d $na_co_jsem_narazil ]; then

cd $na_co_jsem_narazil;

funkce;

cd ..;

fi

done

}

ovšem pokud chci takto procházet nějaký adresář, který se nachází jinde, než spouštěný skript, dojde k zacyklení (a navíc se ani nezanořuji):

for na_co_jsem_narazil in /home/Plocha/slozka/*

Děkuji za každou radu. Kamil.

Ř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

7.3.2011 11:20 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: cyklus for in
Odpovědět | | Sbalit | Link | Blokovat | Admin

1. Proměnné prostředí jsou ve funkci defaultně sdílené se zbytkem skriptu, takže všechny instance vaší funkce sdílejí jednu proměnnou na_co_jsem_narazil. Má-li být proměnná lokální, je potřeba ji deklarovat pomocí local:

funkce ()
{
  local na_co_jsem_narazil
  for na_co_jsem_narazil in *; do
    ...
  done
}

2. Pokud v té funkci opravdu máte

  for na_co_jsem_narazil in /home/Plocha/slozka/*; do
    ...
  done

tak se v každé instanci prochází cyklem stejný seznam souborů, takže obsahuje-li aspoň jeden adresář, nic jiného než zacyklení se ani stát nemůže. Patrně jste spíš chtěl něco jako

  cd /home/Plocha/slozka/*
  funkce
7.3.2011 15:29 Kamil.Plech
Rozbalit Rozbalit vše Re: cyklus for in
Ano, byla to moje chyba nepozornosti, děkuji.

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.