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: 下标超出范围

当我只给一个数组时烫发数组如下,我没有收到错误。

set -A perm ${PR_Tperm[@]}

我有很多条目要存储烫发大批。如何动态增加数组的大小?组-A与 bash 无关,但这种动态增加对于 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

相关内容