Bash命令行解析包含空格

时间:2015-03-04 22:17:29

标签: bash shell unix scripting scripting-language

我在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。

2 个答案:

答案 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("' '"))."'")

会对此进行清理,然后调用您的脚本。