【问题标题】:Expanding a variable containing a command doesn't work as expected in a Bash script扩展包含命令的变量在 Bash 脚本中无法按预期工作
【发布时间】:2014-11-11 06:40:26
【问题描述】:

我有一个变量定义如下:

#!/bin/bash
#commonvars.sh

#Plus other definitions

NUMBERED='nl -w3 -s". " '

然后我在另一个脚本中使用它:

#!/bin/bash

source commonvars.sh
$NUMBERED "${DL_FILE}.titles"

nl 命令不起作用并给出使用错误。

usage: nl [-p] [-b type] [-d delim] [-f type] [-h type] [-i incr] [-l num]
          [-n format] [-s sep] [-v startnum] [-w width] [file]

我确定这一定是一件小事,但我在上面到底做错了什么?我这样做的原因是为了在我的脚本中获得对 nl 命令的标准化调用。

在 Mac OS X 10.9.4 上运行。

【问题讨论】:

  • 不要将命令放在字符串中。如果您需要这样做,请将它们放入数组中。有关详细信息,请参阅mywiki.wooledge.org/BashFAQ/050
  • @EtanReisner 你能把这个添加一个答案吗?我想给它投票——这是非常有用的东西。谢谢。
  • 我没有这样做,因为这种问题出现了很多(正如它的常见问题解答条目的存在所表明的那样),我正在寻找一个很好的问题来将其标记为重复的,但找不到。

标签: bash variables scripting


【解决方案1】:

试试这个:

commonvars.sh:

已编辑(我之前贴错了)

NUMBERED=("nl" "-w3" "-s. ")

其他脚本:

source commonvars.sh
"${NUMBERED[@]}"  "${DL_FILE}.titles"

如果您在有问题的扩展之前设置跟踪模式,您可以更好地了解发生了什么:

set -x 

【讨论】:

  • 在 [x] 中指定所需的数组元素。 @ 表示所有元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多