我在shell脚本中解析了一个命令行参数,如下所示:
cmd --a=hello world good bye --b=this is bash script
我需要解析“a”的参数,即“hello world ......”,它们被空格分隔成数组。
即a_input()数组应包含“hello”,“world”,“good”和“bye”。
同样适用于“b”参数。
我尝试了如下:
--a=*)
a_input={1:4}
a_input=$@
for var in $a_input
#keep parsing until next --b or other argument is seen
done
但上述方法很粗糙。任何其他工作。我不能使用getopts。
答案 0 :(得分:1)
最简单的解决方案是让您的用户首先正确引用参数。
除非你可以手动循环直到你到达论点的末尾或点击下一个--argument
(但这意味着你不能在你的--
中包含一个以--
开头的单词参数值...除非你对那些限制{{1}}个词的数量略少的人进行有效选项测试。
答案 1 :(得分:0)
添加到Etan Reisners的答案,这是绝对正确的:
我个人认为bash有点麻烦,当数组/字符串处理变得更复杂时,如果你真的有这个奇怪的要求,那个调用者不应该被要求使用引号,我会在这里写一个中间脚本,比如说,Ruby或Perl,它只是以适当的方式收集参数,包装它们周围的引用,并将它们传递给最初应该被调用的脚本 - 即使这需要额外的过程。
例如,Ruby One-Liner,例如
system("your_bash_script here.sh '".(ARGV.join(' ').split(' --').select {|s| s.size>0 }.join("' '"))."'")
会对此进行清理,然后调用您的脚本。