【问题标题】:How to split items of a string into two, one contains item start with '-D'?如何将字符串的项目分成两部分,一个包含以'-D'开头的项目?
【发布时间】:2015-06-30 03:42:42
【问题描述】:

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

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

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

task1 task2 -Daaa=111 -Dbbb=222 task3

然后我想从字符串中取出所有以-D开头的args,并制作两个字符串:

-Daaa=111 -Dbbb=222

task1 task2 task3

我不熟悉 bash,我现在可以做的是拆分字符串并检查每个项目,然后以某种方式将它们分组。这似乎有点复杂。

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

【问题讨论】:

标签: bash shell


【解决方案1】:

一种方法是:

#!/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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2013-05-21
    • 2015-01-28
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多