for +配列+パラメータ

for +配列+パラメータ

forループに問題があります。これが私が望むものです。

for arg
do
array[index]=(`find $arg -type l -maxdepth $depth -printf "%p\n" `)
 index++
done
fi

arg- 位置パラメータ、ディレクトリのみ

このループはパラメータを調べてシンボリックリンクを見つけます。私はシンボリックリンクを配列に保存したいと思います。 1つのディレクトリだけを使用してスクリプトを実行すると正常に機能しますが、複数のディレクトリを入力すると機能しません。助けが必要ですか?

私は次のように働きたいと思います。たとえば、次のようになります。

2つのパラメータがあり、各パラメータはディレクトリです。

ループは最初に引数を最初のディレクトリに設定し、配列はシンボリックリンクで埋められます。たとえば、2つのシンボリックリンクを見つけるため、array [0] array [1]はそのリンクになり、2番目の引数として続行する必要があります。たとえば、array [2] array [3] array [4]に設定する必要がある3つのシンボリックリンクがあります。

ベストアンサー1

ksh93多次元配列(または配列の配列)なしでOR bash(およびGNU)について話している場合は、find次のことができます。

index=0 IFS=$'\n'
set -f
for arg do
  eval "array_$index"'=($(find "$arg" -type l -maxdepth "$depth" -print))'
  ((index++))
done

別の配列を呼び出すにはarray_0...array_1

(上記では、ファイル名に改行文字が含まれていないと仮定します。)

すべてのリンクを1つの配列に結合するには、次のようにします。

IFS=$'\n'
set -f
array=($(find "$@" -type l -maxdepth "$depth" -print))

それだけで十分です。

シェルで配列またはループを使用することは、通常、正しい方法で問題にアクセスしていないことを示します。

たとえば、探したい場合最も深いご意見が示すように、シンボリックリンクするには:

find "$@" -type l -print | awk -F/ '
   NF > n {deepest = $0; n=NF}
   END {print "Deepest:", deepest}'

awkテキストを処理して配列を使用する場合、シェルよりも効率的です。そのために設計されています。シェル(bashすべてのシェルの中で最も効率が低いものの1つ)ではありません。シェルはコマンド(awkまたはfind)を実行するのにうまくいきます。これがシェルが設計された理由です。

おすすめ記事