gpt4 book ai didi

linux - shell脚本中的内联变量

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:07 25 4
gpt4 key购买 nike

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

# 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`"`

但没用。

最佳答案

代码应该存储在函数中,而不是变量中。参见 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 周围加上反引号,导致该变量的值在赋值时存在被字符串拆分、glob 扩展,然后运行一个命令,该命令的输出(大概是一个空字符串)被替换到位。
  • 它的尾部有一个不匹配的反引号,使其语法无效。

关于linux - shell脚本中的内联变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35234700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com