Bash 如何在Shell脚本中执行环境变量?
我有两个文件。 一个是名为envlist的列表文件。 另一个是名为test的shell脚本文件 在envlist(列表文件)中,有如下环境变量列表Bash 如何在Shell脚本中执行环境变量?,bash,shell,Bash,Shell,我有两个文件。 一个是名为envlist的列表文件。 另一个是名为test的shell脚本文件 在envlist(列表文件)中,有如下环境变量列表 setup_top CFG #!/bin/bash dir=$(<$env/envlist) # $env is another environment variable I declared. for i in ${dir[*]} do cd $i # I think this line is
setup_top
CFG
#!/bin/bash
dir=$(<$env/envlist) # $env is another environment variable I declared.
for i in ${dir[*]}
do
cd $i # I think this line is a matter.
echo "------------------"
sleep 2
done
这些已声明为环境变量
(因此,当我在命令中键入cd$setup\u top或cd$CFG时,效果很好)
在测试中(shell脚本),代码如下
setup_top
CFG
#!/bin/bash
dir=$(<$env/envlist) # $env is another environment variable I declared.
for i in ${dir[*]}
do
cd $i # I think this line is a matter.
echo "------------------"
sleep 2
done
逐行读取envlist文件似乎效果不错,但cd命令似乎不起作用
如何修复shell脚本代码以使其正常工作?实际上,您需要将
$I
转换为变量名,然后读取$varname
。如果shell支持这一点,您应该编写cd$$i
。不幸的是,这不起作用,因为$$
给出了当前PID
正如@Biffen所建议的,您应该使用shell变量替换:
cd${!i}
前面的回答,使用危险eval
说明:
eval cd\$$i
注意:
eval
是一条危险的指令。仅当您确定文件内容(而不是不受信任的用户提供的文件)时才使用它。如果setup\u top
和CFG
是相对路径,您需要在循环的末尾包含一张cd..
。感谢Veyret回答我的问题。你给了我两个答案。不幸的是,我换了台词后得到了同样的错误答案。只有两个“-------------”是我从终端得到的东西。当我再次尝试Bourne Shell脚本,ASCII文本可执行文件时,它失败了。但当我再次尝试Bourne Shell脚本,UTF-8 unicode文本可执行文件时,它工作了!!!谢谢@你还指望什么cd
不打印任何内容。不,我想说的是,当我执行该行时,它应该被移动到$setup\u top或$CFG。但它一点也没动all@SatthewSeongHunMoon你是怎么证实的?您无法“看到”工作目录正在更改。