我正在写一个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,我现在能做的就是分割字符串并检查每个项目,然后将它们分组。这似乎有点复杂。
如果有任何简单的方法可以做到这一点?
答案 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