我在bash中一个接一个地运行两个命令时遇到问题。当我跑
source2() { '/home/ds/Documents/scripts/Untitled Document 1.sh' && imgpath="$(ls | grep "^unsplash")" }
source3() { '/home/ds/Documents/scripts/Untitled Document 2.sh' && imgpath="$(ls | grep "^1920x1080" | shuf -n 1)" }
source4() { '/home/ds/Documents/scripts/Untitled Document 3.sh' && imgpath="$(ls | grep "^unsplashimg")" }
SOURCES=("source2" "source3" "source4")
$(eval $(shuf -n1 -e "${SOURCES[@]}"))
echo $imgpath
bash 脚本部分运行,但之后的部分&&
没有运行,因此echo $imgpath
没有输出。当我运行单个命令时
'/home/ds/Documents/scripts/Untitled Document 1.sh' && imgpath="$(ls | grep "^unsplash")"
然后我得到想要的输出。
我究竟做错了什么?
我已经从
除了语法问题,这就是您的调用方式
eval
:外部
$(...)
意味着 eval 发生在子 shell 内,然后当前 shell 获取输出并将其作为命令执行。因为 eval 在子 shell 中运行,所以变量的内容会随着子 shell 消失。
现在,你需要
eval
吗?该shuf
命令将生成一个与函数同名的字符串。你可以改写:或者干脆
在最后一种情况下,我们确实希望 shell 将 shuf 的输出作为命令执行