如何接受引用的句子作为 shell 脚本中的参数

How to accept a quoted sentence as argument in shell script

我正在尝试在 bash 中接受一个 引用参数 类似于:

$ git commit -m "message as a sentence"

$ something "foo bar"

然后,我想从中提取 message as a sentencefoo bar

到目前为止我所做的是:

if [[ "" =~ "-m" ]]; then
  if [ -z  ]; then
    echo  "Must have a message"
  else
    # @TODO
  fi
fi

有什么想法吗?

继续评论,在命令行上发生的关于您的脚本参数的事情是由您的 shell 处理的 。因此,当您提供命令行参数时,正常的 shell 扩展和分词应用。当您引用脚本的参数时,您的 shell 将适当地避免引号内的分词,但实际的引号本身将被您的 shell.

删除

在您的脚本中,您的位置参数 将正确包含您的shell 处理参数的结果。因此,在您的情况下,您的脚本(或您的示例中的 git)将收到,

 : commit
 : -m 
 : your message as a sentence

你的脚本逻辑没问题,你在脚本中 运行 遇到的问题是不正确的引用。具体来说 [[ ... ]] 不需要引用,但是 [ ... ] 需要。

因为你没有在 [ -z ] 中引用 </code> 你实际上是在问:</p> <pre><code>[ -z your message as a sentence ]

shell 将接受太多参数。因此,要解决此问题,请在使用 test[ ... ](它们是同义词)时引用,例如

[ -z "" ]

查看了所有内容,如果您还有其他问题,请告诉我。