【发布时间】:2015-08-14 23:59:30
【问题描述】:
var1=$(echo $getDate | awk '{print $1} {print $2}')
var2=$(echo $getDate | awk '{print $3} {print $4}')
var3=$(echo $getDate | awk '{print $5} {print $6}')
我不需要像上面的代码那样重复,而是:
- 循环相同的命令
- 增加值({print $1} {print $2})
- 将值存储在数组中
我正在做类似下面的事情,但我卡住了,也许有人可以帮助我:
COMMAND=`find $locationA -type f | wc -l`
getDate=$(find $locationA -type f | xargs ls -lrt | awk '{print $6} {print $7}')
a=1
b=2
for i in $COMMAND
do
i=$(echo $getDate | awk '{print $a} {print $b}')
myarray+=('$i')
a=$((a+1))
b=$((b+1))
done
PS - 使用 ksh
问题:$COMMAND 存储在 $locationA 中找到的文件数。我需要遍历找到的文件数量并将它们的日期存储在一个数组中。
【问题讨论】:
-
你使用的是哪个外壳?
-
参见mywiki.wooledge.org/ParsingLs 和mywiki.wooledge.org/BashFAQ/087 -- 使用
xargs ls是绝对提取元数据的错误方法。 (以安全和便携的方式查找 N 个最新文件本身就是一个常见问题解答,并且有很好的解决方案。 -
此外,从
find到xargs ls的管道将在每批文件中调用一次ls,其中批大小取决于您平台的MAX_ARGS,而ls -t仅在这些批中排序(因为一个调用只能对给出调用的参数进行排序).. 总而言之,除了上面链接中给出的错误之外,你在这里所做的 also 没有如果文件数量超过一定数量,则按时间正确排序。 -
@anubhava,显然 shell 有数组和
+=语法,所以我假设它是 bash(并且没有被错误标记为这样)。 -
顺便说一句,
for i in $COMMAND也被严重破坏了。另见mywiki.wooledge.org/DontReadLinesWithFor——但是,既然你正在输入wc -l,那么$COMMAND中只会有一个东西,一个数字。迭代仅包含单个数字的变量的字符串拆分版本有什么意义?
标签: arrays shell unix scripting