在数组中存储命令输出?

时间:2017-04-23 11:38:45

标签: ksh aix

当我尝试在变量中存储 ls -ltr * .sh 输出时,它工作正常,但是当我尝试存储在数组中时,它会让我犯错误。如何将命令输出存储在数组中,就像存储在变量中一样。

  

实施例(1):

set -A arr $(ls -ltr *.sh)
echo "${arr[@]}"

错误:

  

-rw-r - r--:错误选项

为什么会出现此错误,此数组如何处理命令输出。我试过如下。

  

实施例(2):

set -A arr "$(ls -ltr *.sh)"
echo "${arr[@]}"

错误:这里输出是单行,并说badoptions。如何逐行打印数组输出。

  

-rw-r - r-- 1 root system 0 Apr 23 07:06 tt2.sh ^ J-rw-r - r-- 1 root system 0 Apr 23 07:06 tt1.sh ^ J- rw-r - r-- 1 root system 0 Apr 23 07:06 test.sh ^ J-rw-r - r-- 1 root system 49 Apr 23 07:09 tt.sh:bad option(s)< / p>

1 个答案:

答案 0 :(得分:0)

我知道有一段时间了...但是以防万一。

  1. 可以使用set -A arr -- $(ls -ltr *.sh)
  2. 避免出现错误的选项

但是您最终将得到一个数组,该数组将存储数据而不是每行存储一行数据,而是在每个空间存储一个新索引。

  1. 使用相同的--

  2. 可以避免回声错误(您应该使用print代替)
  3. 我不知道有谁能满足您的需求。我会自己循环执行此操作。像这样的东西:

    #!/bin/ksh
    
    j=0
    
    while read line; do
            array[$j]="$line"
            ((j++))
    done <<< "$(ls -ltr *.sh)"
    
    print ${#array[*]}
    print -- ${array[2]}
    

希望它仍然可以帮助