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

随风

我正在写一个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并不熟悉,我现在可以做的是拆分字符串并检查每个项目,然后以某种方式将它们分组。这似乎有点复杂。

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

大卫·兰金(David C.Rankin)

一种方法是:

#!/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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

拆分一个字符串,只取 5 个项目。但限制字符<20

Python函数判断一个字符串中的两个单词是否以同一个字母开头

如何通过Windows命令提示符和C#在一个字符串中更改两个项目

Flutter,Dart将句子每一个字符拆分为2个字符,用于Flutter定制的TTS项目

熊猫数据框-选择其中一列的值包含一个字符串而另一列的值以特定字符串开头的行

PHP 字符串包含两个字符,然后在开头有一个斜杠

如何检查一个字符串是否以另一个字符串开头-PHP

如何将StringBuffer的最后一个字符传输到开头?

在另一个字符串的开头插入字符串

使用列表<字符串>。任何()找到,如果一个字符串包含以及找到匹配的项目的项目?

删除两个连续行的第一行中的第一个字符串,它们的开头都相同

我如何在数组的每个项目上添加一个字符串?

如何打印数组并向 Bash 中的每个项目添加一个字符串

将字符串添加到另一个字符串的开头

查看一个字符串是否以另一个字符串的结尾字符开头?

如何知道一个字符串以jQuery中的特定字符串开头/结尾?

如何使用Regex搜索不以另一个字符串开头的字符串

我如何写出 arr 中的每个值,它是一个字符串数组,每行一个项目

获取一个字符串并将其放在行的开头,直到找到下一个字符串

检查一个字符串的结尾是否与另一个字符串的开头匹配

在ng-model的开头附加一个字符串

从ArrayList中删除一个元素的字符串包含某个字符串的项目

对于数组中的每三个项目,从另一个数组连接一个字符串

用仅以选定项目开头的结果从另一个组合框中的第一个字符填充组合框

如何从包含另一个字符串列表的任何项目的字符串列表中打印出列表项

C#:需要将一个字符串拆分成一个字符串[],并将分隔符(也是一个字符串)保留在字符串的开头

如何将不是以(“)字符开头的新行更改为另一个字符串

PHP Preg_match一个字符串中有多个项目?

-PropertyType 设置为双字,但当项目被创建时它作为一个字符串出现