Unix - 无法将列表分配给数组成员

时间:2013-07-26 04:17:43

标签: shell unix

我是Unix编程的新手,我正在尝试使用ls -ltr将目录列表中的返回值存储到数组中。我的shell代码在这里:

 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

谁能告诉我该怎么做?

2 个答案:

答案 0 :(得分:1)

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

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

myDir="."

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

返回目录中最旧的一个。

(maxdepth限制到当前目录并排除子目录 -type f表示文件只有没有dirs -printf%T%p显示修改时间,后跟文件名 )

使用

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

只获取文件名。

答案 1 :(得分: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/