我正在写一个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并不熟悉,我现在可以做的是拆分字符串并检查每个项目,然后以某种方式将它们分组。这似乎有点复杂。
是否有任何简单的方法可以做到这一点?
一种方法是:
#!/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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句