2016-03-28 36 views
0

私はこのコードを持っていますが、FreeBSDで試してみるとエラーが多く表示されます...どうすれば修正できますか?変数IGNと一致する場合、ディレクトリをチェックします。 NAME_dは配列でなければなりません。それはそれを解決しますが、bashのを使用している場合、あなたはあなたがすべきアレイに追加する配列として、その後UNIX:配列を使用しようとするとエラーが発生する

NAME_d=() 

とをNAME_dを開始する必要がある場合

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

これは今日二度目である私は、この '配列を参照してください'以前の検索でループし、ループ内で別の検索でそれぞれの検索から1行だけを読み込みます。これは最適ではありません。あなたの仕事を再考してください!どうすれば 'let x = 0;見つける。タイプd |読んでいる間に。 「x ++」しましょう。 $ dirで作業してください。おそらくLINENO $ xを使っても構いません。 done' – ikrabbe

+1

あなたは 'bash'を使用しているようには見えません。これはバージョン3.1以降の代入文に対して' + = 'を許しています。さらに、 'NAME_d'は' bash'を使っていても配列ではありません。 – chepner

+0

テキストとして投稿できない場合は、画像として情報を提供します(読み取り可能、検索可能など)。 –

答えて

1

アレイはAlmquistシェル、FreeBSDの(すなわち、/ binに/ SH)のデフォルトのBourneスタイルのシェルによってサポートされていないbashismあります。シェルの利点は、ほとんどのスクリプトが約3倍高速に動作することです。

bashismを使用する場合は、bashを使用してスクリプトを実行します。例えば。それをbash dirstat.shと呼び、シバンを変更します。

これはFreeBSDで正しいものです。

#!/usr/local/bin/bash 

これはポータブル版ですが、設定するPATHが必要です。

#!/usr/bin/env bash 

あなたはまた、最初のbashをインストールする必要があります​​

1

わかりませんまた、括弧を使用してください。

NAME_d+=("${i}d ") 
関連する問題