【发布时间】:2019-01-27 21:01:48
【问题描述】:
我有代码:
typeset -i idx=0
for each in `find . -name "*.log" -print `
do
ILIST[idx]=`basename $each`
idx=idx+1
print :${ILIST[$idx]}:$each:$idx << does not print array element "::file1.log:o"
done # for each
print ${ILIST[@]} << prints entire array as expected
exit
那么,如何打印数组的单个元素?它适用于 HPUX。目标是并排创建 2 个数组,其中一个是文件名,另一个是创建时间,以便可以检查该文件的时间。
【问题讨论】:
-
您为数组元素
idx分配了一些东西,但随后您将其递增并打印元素idx+1,此时该元素始终为空。只需在循环的最后递增... -
我通常建议通过使用符合 POSIX 的数学语法 (
idx=$((idx + 1 ))) 来避免对typeset -i的依赖——这样读者就不必过多关注上下文确保您的代码正常工作。 -
不过,作为一个不同的问题 --
for each in $(find ...)表面上是坏的;不处理带有空格、通配符等的文件或目录名称。请参阅UsingFind 了解更好的实践讨论——虽然它是一个以 bash 为中心的文档,但它确实讨论了显示的每个模式与不同 shell 和不同版本的兼容性find。同样,BashPitfalls #1 也适用于此。