Unix スクリプトでは配列にいくつの要素を保存できますか?

Unix スクリプトでは配列にいくつの要素を保存できますか?

/usrディレクトリ、 、/tmpのファイル権限と、サブディレクトリの内容を確認する必要があります。 、、/varのそれぞれについて、ディレクトリとそのサブディレクトリ ファイルのファイル権限を配列で個別に取得しました。/usr/tmp/var

fun() {
  set -A  PR_Uperm -- "/usr" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
  set -A  PR_Tperm -- "/tmp" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
  fun2
}

最後に、スクリプトに動的スコープがあるため、これらの個別の配列を別の関数内の単一の配列に含めたいと思います。次のように試しました。

fun2(){
  set -A perm ${PR_Uperm[@]} ${PR_Tperm[@]}
}

スクリプトを実行するとこのエラーが発生します。

script.sh:79919: 添字が範囲外です

配列を1つだけ与えるとパーマ配列は以下のとおりですが、エラーは発生しません。

set -A perm ${PR_Tperm[@]}

保存するエントリがたくさんあるパーマ配列。配列のサイズを動的に増やすにはどうすればよいですか?セット-Abash とは関係ありませんが、この動的な増加は bash と ksh でも同じである可能性があるので、これを含めました。

以下のように一時ファイルに保存しようとしました。

printf "/usr\n`ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`\n" >> /tmp/output2.txt  # not working in ksh, but working when I run as bash
ksh: no space

ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}' >> /tmp/output2.txt # it is working

最初のコマンドが bash では正常に実行されたのに、 ksh では実行されなかったのはなぜですか?

答え1

私の記憶が正しければ、Bash には配列サイズに関する組み込みの制限はありません。KornShell93 は、最近のリリースでは最大約 64k のインデックスをサポートしています (古いリリースでは最大 4095 です)。

ファイル階層を仕様と比較するために使用される というユーティリティがありますmtree。仕様からの逸脱 (ファイルまたはディレクトリの欠落、所有権/権限の不一致) は報告され、オプションで修正されます (可能な場合)。

あなたが使用しているUnixがわからないので、このユーティリティがどこにあるかはこれ以上お伝えできません。OpenBSDの基本システム、しかし、明らかにLinuxで利用可能

関連情報