【问题标题】:How to execute a command with $variable that contains spaces?如何使用包含空格的 $variable 执行命令?
【发布时间】:2014-03-06 13:38:18
【问题描述】:

在我的脚本中,我有这一行:

[ -z "$(file $1 | grep '256')" ] && echo 256

如果 $1 包含空格,则会收到错误消息

line 11: [: too many arguments

我怎样才能正确引用它以使其正确运行?

更新:
我错误地粘贴了脚本中的行。此行的错误消息是正确的

[ -z $(file "$1" | grep '256') ] && echo 256

【问题讨论】:

    标签: bash shell scripting terminal


    【解决方案1】:

    在变量周围使用双引号。总是。

    (嗯,并非总是如此。在某些情况下,您希望 shell 对一个值执行分词,但这些情况很少,您不应该期望很快就能理解。)

    但是,您在那里所做的可以简单地替换为

    file "$1" | grep -o '256'
    

    Shell 引用是常见的常见问题解答;很难理解,但一点也不难。参见例如http://mywiki.wooledge.org/Quotes(特定于 Bash,但通常适用于整个 Bourne shell 系列。)

    【讨论】:

      【解决方案2】:

      双引号$1:

      [ -z "$(file "$1" | grep '256')" ] && echo 256
      

      PS:您发布的行不会导致您所指的错误。要么你从另一个版本复制了错误,要么你的脚本中有另一个错误引用的行。

      【讨论】:

      • 它有效。但我不明白为什么。我认为 $1 周围的引号会抵消外部引号。你有链接让我可以找到更多相关信息吗?
      • $(...) 中的上下文首先被评估,然后父 shell 的引用被处理。
      • "$(...) 中的上下文首先被评估" 嗯,这更有意义。谢谢
      猜你喜欢
      • 1970-01-01
      • 2017-06-14
      • 2015-10-11
      • 2015-07-30
      • 2013-05-04
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多