2016-03-28 13 views
0

kullanmayı denediğimde hata yaşıyorum Bu kodu aldım ve FreeBSD'de denediğimde bana bir çok hata gösteriyor ... nasıl düzeltebilirim? Değişken IGN ile eşleşiyorsa dizinleri kontrol ederim. NAME_d bir dizi olmalıdır. onu çözecek, ancak bash kullanıyorsanız, size gerektiği dizisine ekleyerek bir dizi olarak daha sonraUNIX: dizi

NAME_d=() 

ve NAME_d başlatmalıdır eğer

max_d=$(find "${DIR}" -type d | wc -l) 

for i in `seq 1 $max_d` 
do 
    check_d=$(find "${DIR}" -type d | head -n "${i}" | tail -n -1 | tr '\/' '\n' | egrep -n "${IGN}") 

    if [ ! -z "$check_d" ]; then 

    NAME_d+=$i"d " 

    fi 

done 

directory_d=${NAME_d[*]} 
sedCmds_d=${directory_d// /;} 

erroe

+0

bu bugün bunu 'seq bkz ikinci kez Bir önceki buluntu ile döngü ve başka her bir bulgudan sadece bir satır okuyarak döngüde bulmak. Bu optimal olmaktan uzak. İşini yeniden düşün! X = 0'a ne dersin? bul. -type d | dir okurken; 'x ++' yapalım; İŞİNİZİ BURADA $ İNDİRİN, LÜTFEN VEYA LINENO $ x. KULLANABİLİRSİNİZ. done ' – ikrabbe

+1

Sürüm 3.1'den bu yana atama bildirimleri için '+ =' izinli olan 'bash' kullanıyor görünmüyorsunuz. Buna ek olarak, 'bash' kullanıyor olsanız bile' NAME_d' bir dizi değildir. – chepner

+0

Resim olarak bilgi sağlayın, metin olarak gönderilemezler (okunabilir, aranabilir, vb.). –

cevap

1

Diziler olup Almquist kabuk, FreeBSD (yani/bin/sh) varsayılan Bourne tür kabuk tarafından desteklenen bir bashism vardır. Kabuğun bir avantajı, çoğu betiğin yaklaşık 3 kat daha hızlı çalışmasıdır.

Bashis kullanmak isterseniz, betiğinizi yürütmek için bash komutunu kullanın. Örneğin. bash dirstat.sh numaralı telefonu arayın veya shebang'ı değiştirin.

Bu FreeBSD için doğru olanıdır.

#!/usr/local/bin/bash 

Bu taşınabilir sürümüdür ancak ayarlanmasını PATH gerektirir:

#!/usr/bin/env bash 

Ayrıca ilk bash yüklemek gerekebilir: pkg add bash

1

emin değil ayrıca parens kullanın, örn.

NAME_d+=("${i}d ")