【发布时间】:2016-08-03 19:40:37
【问题描述】:
假设我有一个 bash 数组
X=("a" "b c" "-d" "k j", "-f")
我想过滤是否以"-"开头并得到
分别为("a" "b c" "k j") 和("-d" "-f")。
我怎样才能做到这一点?
【问题讨论】:
-
Use
getopts解析参数。
标签: bash
假设我有一个 bash 数组
X=("a" "b c" "-d" "k j", "-f")
我想过滤是否以"-"开头并得到
分别为("a" "b c" "k j") 和("-d" "-f")。
我怎样才能做到这一点?
【问题讨论】:
getopts 解析参数。
标签: bash
我认为您必须遍历数组:
$ 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,
【讨论】:
通过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 过滤入/出匹配模式的元素
【讨论】: