如何将字符串中的项目拆分为两个,一个包含项目以' -D'?

时间:2015-06-30 03:42:43

标签: bash shell

我正在写一个shell,其他人可以传递参数,比如:

someshell task1 task2 -Daaa=111 -Dbbb=222 task3

在shell中,我可以使用$@获取所有参数,即:

task1 task2 -Daaa=111 -Dbbb=222 task3

然后我想让所有args以字符串中的-D开头,然后创建两个字符串:

-Daaa=111 -Dbbb=222

task1 task2 task3

我不熟悉bash,我现在能做的就是分割字符串并检查每个项目,然后将它们分组。这似乎有点复杂。

如果有任何简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:4)

一种方法是:

#!/bin/bash

for i in "$@"; do
    [ ${i:0:2} = -D ] && ar1+=( $i ) || ar2+=( $i )
done

echo "string1: ${ar1[@]}"
echo "string2: ${ar2[@]}"

<强>输出

$ bash myarg.sh task1 task2 -Daaa=111 -Dbbb=222 task3
string1: -Daaa=111 -Dbbb=222
string2: task1 task2 task3

另一种选择:

for i in "$@"; do
    [[ $i = -D* ]] && ar1+=( $i ) || ar2+=( $i )
done

完整示例:

#!/bin/bash

for i in "$@"; do
    [ ${i:0:2} = -D ] && ar1+=( $i ) || ar2+=( $i )
done

echo "string1: ${ar1[@]}"
echo "string2: ${ar2[@]}"

unset ar1
unset ar2

for i in "$@"; do
    [[ $i = -D* ]] && ar1+=( $i ) || ar2+=( $i )
done

echo "string1: ${ar1[@]}"
echo "string2: ${ar2[@]}"

exit 0

<强>输出

$ bash myarg.sh task1 task2 -Daaa=111 -Dbbb=222 task3
string1: -Daaa=111 -Dbbb=222
string2: task1 task2 task3
string1: -Daaa=111 -Dbbb=222
string2: task1 task2 task3