假设我有一个 bash 数组
我希望按照是否以
X=("a" "b c" "-d" "k j", "-f")
我希望按照是否以
"-"
开头进行过滤,并分别获取("a" "b c" "k j")
和("-d" "-f")
。请问我该如何实现?X=("a" "b c" "-d" "k j", "-f")
"-"
开头进行过滤,并分别获取("a" "b c" "k j")
和("-d" "-f")
。请问我该如何实现?我认为你需要遍历这个数组:
$ 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,
从一个类似问题的答案中,您可以这样做:
A=$((IFS=$'\n' && echo "${X[*]}") | grep '^-')
B=$((IFS=$'\n' && echo "${X[*]}") | grep -v '^-')
根据这个答案:
IFS=$'\n' 的作用是将 "${MY_ARR[*]}" 扩展为以换行符分隔的项,以使它可以通过 grep 进行管道处理。 特别地,这将处理嵌入在数组项中的空格。
然后我们使用 grep
/ grep -v
来过滤匹配模式的元素 / 排除匹配模式的元素。
getopts
来解析参数。 - Amadan