【问题标题】:how to tell a bash script to parse a single command-line argument that contains spaces?如何告诉 bash 脚本解析包含空格的单个命令行参数?
【发布时间】:2017-09-15 02:42:55
【问题描述】:

我有一个接受多个命令行参数($1、$2、...等)的 bash 脚本。启动脚本的程序是,出于我不会在这里讨论的原因,将命令行参数作为一个字符串传递,bash 脚本将其解释为 $1。这个字符串包含所需参数之间的空格,但 bash 仍将其解释为单独的命令行参数。有没有办法告诉 bash 使用空格作为分隔符来解析它的命令行参数?

例如,如果 argstring = 50 graphite downtick 我希望 bash 看到 $1=50 $2=graphite $3=downtick,而不是 $1=50 graphite downtick

【问题讨论】:

  • 不要引用扩展名,它会分词(但它会在每个空格上分词,这也可能不是您想要的。并注意 glob。)
  • @rici 我不明白你所说的“不要引用扩展名”是什么意思。
  • 当您使用 $1 时。大概你在某处使用它。如果要将其拆分为位置参数,可以使用set -- $1。如果你想将它作为三个单词传递给不同的命令:other_cmd $1。只要您不引用扩展名 ("$1"),它就会被拆分。 +但这是传递多个参数的次优方式。)

标签: bash


【解决方案1】:

只需在程序顶部添加这一行:

set -- $1

the bash reference manual 中有关set 的更多信息以及this Stack Overflow answer 中的另一个用法示例。基本上,它可以用来替换传入脚本的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2023-01-27
    • 2012-08-05
    • 2021-03-20
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多