请问该循环有什么问题?
while read result
do
filenames[ $j ]="$result"
filedates[ $j ]=$(stat -c %y ${filenames[ $j ]} | cut -d ' ' -f1)
(( j++ ))
done << (ls -t *.gz)
我收到此错误:
script.sh: line 13: syntax error near unexpected token `('
script.sh: line 13: `done << (ls -t *.gz)'
答案 0 :(得分:2)
看起来您正在尝试使用Process substitution,但却没有正确地执行此操作。
你需要:
while read result
do
filenames[ $j ]="$result"
filedates[ $j ]=$(stat -c %y ${filenames[ $j ]} | cut -d ' ' -f1)
(( j++ ))
done < <(ls -t *.gz)
请注意done
行间距的重要差异。您使用单个<
重定向;然后使用<(...)
进行流程替换。使用<<
表示代码正在查找“此处文档”。
答案 1 :(得分:1)
假设你有GNU coreutils:
stat -c "%Y %n" * | awk '{print $2, (prev ? (prev-$1)/86400 " days" : ""); prev=$1}'
鉴于这些文件:
touch file1.tar.gz
touch -t 01041200 file2.tar.gz
touch -t 1312311200 file3.tar.gz
touch -t 1312261200 file4.tar.gz
touch -t 1312211200 file5.tar.gz
输出:
$ stat -c "%Y %n" * | awk '{print $2, (prev ? (prev-$1)/86400 " days" : ""); prev=$1}'
file1.tar.gz
file2.tar.gz 5.18753 days
file3.tar.gz 4 days
file4.tar.gz 5 days
file5.tar.gz 5 days