shell脚本中的内联变量

时间:2016-02-05 22:32:55

标签: linux shell unix

在我的一个要求中,我喜欢在脚本开始时创建命令,并希望稍后填充这些变量。例如:

# Global
Mylistdir="ls -la $MYDAIR"

#now after some code  I want to create this variable
MYDAIR="/data/dir/"
#Now like to run taht command on /data/dir
echo "$Mylistdir"

我该怎么做?

我试过它

Mylistdir="ls -la `$MYDAIR`"`

但没有用。

1 个答案:

答案 0 :(得分:2)

代码应存储在函数中,而不是变量中。有关基本原理的完整说明以及忽略此规则导致的错误,请参阅BashFAQ #50

Mylistdir() { ls -la "$MYDAIR"; }
MYDAIR=/data/dir
Mylistdir

如果绝对必须将代码存储在变量中,请使用eval

Mylistdir='ls -la "$MYDAIR"'
MYDAIR=/data/dir
eval "$Mylistdir"

...但请注意BashFAQ #48中给出的警告。

问题中提出的原始代码如下:

Mylistdir="ls -la `$MYDAIR`"`

......现在,由于以下几个原因,它被打破了:

  • 它在外部使用双引号,导致在分配时立即执行任何扩展,而不是在以后的评估时间。
  • 它会在$MYDAIR周围添加反引号,导致该变量的值(因为它在分配时)存在字符串拆分,全局展开,然后作为命令运行,该命令的输出(可能是一个空字符串)替换到位。
  • 最后有一个尾随,无与伦比的反引号,使其语法无效。