Bash 如何使这个过程自动化?

Bash 如何使这个过程自动化?,bash,Bash,大家好,我正在编写一个脚本来解析bash中的一些参数,我想按如下方式运行我的代码: bash myScript.sh +value value1 +valuei value2 ... +valuek valuer variable1=value variable2=value1 variable3=value variable4=value2 . . . valriabler= valriablem 使用该标志创建变量以存储参数,如下所示: bash myScript.sh +value

大家好,我正在编写一个脚本来解析bash中的一些参数,我想按如下方式运行我的代码:

bash myScript.sh +value value1 +valuei value2 ... +valuek valuer 
variable1=value
variable2=value1
variable3=value
variable4=value2
.
.
.
valriabler= valriablem 
使用该标志创建变量以存储参数,如下所示:

bash myScript.sh +value value1 +valuei value2 ... +valuek valuer 
variable1=value
variable2=value1
variable3=value
variable4=value2
.
.
.
valriabler= valriablem 
注意,我只想通过删除+符号来保存标志的值,如前面的示例所示,为了实现这一点,我尝试了:

#!/bin/bash
variable1=$(echo $1 | cut -d "+" -f 2)
variable2=$2
echo $variable1
echo $variable2
运行之后,我得到:

bash myScript.sh +hola hi
hola
hi
我可以解析前两个参数,但问题是我想对多个变量进行解析:

myScript +value value1 +valuei value2 ... +valuek valuer
我想感谢任何关于如何自动化的帮助?在这个任务中,我将解析多个成对的参数,它们具有相同的结构,我想将它们的值存储在变量中,我想感谢任何关于如何实现这一点的建议。
注意,我希望避免使用getopts,因为我希望使用复杂的标志。

您应该使用数组,并按如下方式操作

#!/bin/bash
while (( $# )); do
   arr+=("${1#+}")
   shift
done
for i in "${arr[@]}"; do
   echo "$i"
done
将下一个变量指定给下一个元素,将其禁用,如果还有更多,则继续。你可以像这样呼出它们

#!/bin/bash
while (( $# )); do
   arr+=("${1#+}")
   shift
done
for i in "${arr[@]}"; do
   echo "$i"
done

您是否知道任何Bourne Shell都支持以变量赋值作为命令前缀的一次性赋值

variable1=value variable2=val2 variable3=val3 myscript args ...

这是一种实现参数解析的方法,该脚本使用变量的属性值生成csv

#!/bin/bash
touch archive.csv
while (($# >= 1))
do
        echo "$(echo $1| tr -d "+"),$2" >> archive.csv
        shift 2
done

cat archive.csv
我可以这样运行:

bash parse.sh +value value1 +valuei value2
我得到:

value,value1
valuei,value2

这对解析参数很好。

谢谢,这是一个很好的建议,但我不想在命令行中写入这些赋值。@user138717这与您在上一段代码中所说的有什么不同:
myScript+value value1…
唯一的区别是您重新排列了命令的单词。如果这不是你想要的,也许你可以澄清并描述你的实际问题?为什么?这正是环境变量存在的原因。这并不能解决删除“+”的问题。由于这是一项要求,我猜在传递的值数量未知且不受控制的情况下调用脚本——因此在调用脚本之前不能对其进行硬编码。@SaintHax我认为跳出框框思考是有帮助的。如果OP以他没有想到的方式展示,+问题可能会变成非问题。这就是我要求他澄清的原因。你的建议很好,但我已经能够解析我添加了自己答案的变量。@user138717所以,问题不在于我给出答案一小时后你是否更新了OP,而在于你还在寻找什么?@user138717你没有意识到,通过切换到我写的数组,你可以对任意数量的参数进行更新吗?这就是你所说的你的方法所缺少的。你接受了我的循环,然后在一行上回送这一对到一个文件中——这不是一个要求?循环的结构不是你发明的,条件完全不同,我不得不使用两班制,我还使用了>>运算符和tr来清除参数,我认为它与你的完全不同。请不要编辑你的问题和代码,因为这会使现有的答案无效。