【问题标题】:Storing command output in array?将命令输出存储在数组中?
【发布时间】:2017-09-20 02:33:14
【问题描述】:

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

示例(1):

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

错误:

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

为什么会出现这个错误,这个数组如何处理命令输出。我已经尝试如下。

示例(2):

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

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

-rw-r--r-- 1 根系统 0 Apr 23 07:06 tt2.sh^J-rw-r--r-- 1 根系统 0 Apr 23 07:06 tt1.sh^J- rw-r--r-- 1 根系统 0 Apr 23 07:06 test.sh^J-rw-r--r-- 1 根系统 49 Apr 23 07:09 tt.sh:错误选项

【问题讨论】:

    标签: ksh aix


    【解决方案1】:

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

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

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

    1. 使用相同的-- 可以避免echo 的错误(顺便说一下,您应该使用print 代替)

    2. 我不知道有任何 oneliner 可以满足您的需求。我会自己做一个循环。类似的东西:

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

    希望它仍然可以帮助

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多