【问题标题】:How to filter a bash array如何过滤 bash 数组
【发布时间】:2016-08-03 19:40:37
【问题描述】:

假设我有一个 bash 数组

X=("a" "b c" "-d" "k j", "-f")

我想过滤是否以"-"开头并得到 分别为("a" "b c" "k j")("-d" "-f")

我怎样才能做到这一点?

【问题讨论】:

标签: bash


【解决方案1】:

我认为您必须遍历数组:

$ X=("a" "b c" "-d" "k j", "-f")
$ for elem in "${X[@]}"; do [[ $elem == -* ]] && with+=("$elem") || without+=("$elem"); done
$ printf "%s\n" "${with[@]}"
-d
-f
$ printf "%s\n" "${without[@]}"
a
b c
k j,

【讨论】:

    【解决方案2】:

    通过answer to a similar question,您可以这样做:

    A=$((IFS=$'\n' && echo "${X[*]}") | grep '^-')
    B=$((IFS=$'\n' && echo "${X[*]}") | grep -v '^-')
    

    从那个答案:

    这里的重点是 IFS=$'\n' 导致 "${MY_ARR[*]}" 用换行符分隔项目进行扩展,因此可以通过 grep 进行管道传输。 特别是,这将处理嵌入在数组项中的空格。

    然后我们使用grep / grep -v 过滤入/出匹配模式的元素

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 2011-02-15
      • 2021-08-09
      相关资源
      最近更新 更多