如何接受引用的句子作为 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 sentence
和 foo 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 "" ]
查看了所有内容,如果您还有其他问题,请告诉我。
我正在尝试在 bash 中接受一个 引用参数 类似于:
$ git commit -m "message as a sentence"
或
$ something "foo bar"
然后,我想从中提取 message as a sentence
和 foo 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 "" ]
查看了所有内容,如果您还有其他问题,请告诉我。