在我的一个要求中,我喜欢在脚本开始时创建命令,并希望稍后填充这些变量。例如:
# 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`"`
但没有用。
答案 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
周围添加反引号,导致该变量的值(因为它在分配时)存在字符串拆分,全局展开,然后作为命令运行,该命令的输出(可能是一个空字符串)替换到位。