linux shell 里变量的计算如何控制

我在一个linux的shell脚本里写这样的语句,我发现同一条语句的执行结果被缓存下来了,比如这个,a是ls字符串,然后b是echo ls,第10行的b字符串的结果是当前目录下的所有内容,第13行我创建了一个新的123文件夹,第15行讲道理应该新增了123这个文件夹,但实际没有。shell如下:

该怎么写,让b的内容可以动态变呢,我试着写了个函数c发现是可以的,但是太丑了,有没有办法直接用变量能够实现重新执行呢?

#!/bin/bash

dir="."
a="ls ${dir}"
b="echo $(${a})"
# c(){
#     echo $($1)
# }

${b}
# c $a

mkdir 123

${b}
# c $a
阅读 2.5k
4 个回答

说实话,没怎么看懂你的意思,感觉你想要的是这个 $(${b})

b="$(ls "${dir}")"

# Or
b="`ls "${dir}"`"

反引号不可以嵌套,但是$()可以嵌套,脚本书写为了健壮性与可读性建议选择后者,自己在shell执行oneshot命令图省事可以直接用反引号

变量的值在定义的时候就确定了. 所以不会自动变化. 除非在需要的地方重新执行一次变量赋值.

(文档)[https://manpages.debian.org/b...扩展(EXPANSION)]

通过局部变量的方式,将变量放置在函数里,重复执行函数,每次都会更新变量

#!/bin/bash

dir="."
a="ls ${dir}"
c(){
     b="echo $(${a})"
     echo ${b}
 }

c $a

mkdir 123

c $a

或者

#!/bin/bash

dir="."
a="ls ${dir}"

echo $($a)

mkdir 123

echo $($a)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题