-1

我是 Unix 编程新手,我正在尝试使用ls -ltr. 我的外壳代码在这里:

 cmd=("ls -ltr | grep ^- | awk  'NR==1{print NR":" $9}' | tr ' ' '\n'")
 file[$i]=(`echo eval $cmd`); //line no. 14
 echo ${file[$i]};

现在,这是错误消息:

./file.sh: line 14: file[$i]: cannot assign list to array member

谁能告诉我该怎么做?

4

2 回答 2

1

我认为不依赖全局标志更强大。它们也会影响代码的其余部分。您也不应该解析 ls 的输出。'ls' 输出取决于 'locale' 设置并且可能不同。

使用“查找”选择您想要的文件

myDir="."

find  $myDir  -maxdepth 1  -type f  -printf "%T@ %p\n" | sort -n | head -n 1

返回目录中最旧的。

(maxdepth 限制在当前目录并排除 subdirs -type f 表示 Files only no dirs -printf %T %p 显示修改时间后跟文件名)

利用

find  $myDir  -maxdepth 1  -type f  -printf "%T@ %p\n" | sort -n | head -n 1 | awk '{$1=""; print $0;}'

仅获取文件的名称。

于 2013-07-26T10:54:23.397 回答
0

这是一种方法:

$ shopt -s dotglob
$ shopt -s nullglob
$ ary=(*/)
$ printf "%s\n" "${ary[@]}"

测试:

$ touch file1 file2 file3
$ mkdir dir1 dir2 dir3
$ ls -la
total 20
drwxr-xr-x  5 test test 4096 Jul 26 06:05 .
drwxr-xr-x 14 test test 4096 Jul 26 06:04 ..
drwxr-xr-x  2 test test 4096 Jul 26 06:05 dir1
drwxr-xr-x  2 test test 4096 Jul 26 06:05 dir2
drwxr-xr-x  2 test test 4096 Jul 26 06:05 dir3
-rw-r--r--  1 test test    0 Jul 26 06:05 file1
-rw-r--r--  1 test test    0 Jul 26 06:05 file2
-rw-r--r--  1 test test    0 Jul 26 06:05 file3
$ shopt -s dotglob
$ shopt -s nullglob
$ ary=(*/)
$ printf "%s\n" "${ary[@]}"
dir1/
dir2/
dir3/
于 2013-07-26T04:29:31.843 回答