gpt4 book ai didi

linux - 如何在 bash 中使用 var 检查现有环境变量?

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:37 24 4
gpt4 key购买 nike

上下文

我正在编写一个读取 .config 文件的 .sh 文件。在这个 .config 文件(我无法编辑)中有一些变量。我想测试这些变量是否定义为环境变量。

.config 文件:

APPLICATION_PATH=/var/www/application
MONGO_DATA_PATH=/var/lib/mongodb
MYSQL_DATA_PATH=/var/lib/mysql

test.sh 文件:

#!/bin/sh
if test -e ../my_folder/.config # Test if the .config file exists
then
cat ../my_folder/.config | while read line; do # Read the .config file line per line

env_var="${line%=*}" # Get the part before the '=' character of the current line (e.G. APPLICATION_PATH)
echo $env_var # Display the var (e.G. APPLICATION_PATH)

# Here, I would like to display the env var,
# e.G. like it would do using echo $APPLICATION_PATH
# but using the $env_var

( "echo \$$env_var" ) # Throw an error
done
fi

问题

似乎 ( "echo\$$env_var") 是不可能的。当我运行 test.sh 时,它会显示:

APPLICATION_PATH

./test.sh: ligne 13: echo $APPLICATION_PATH : not found

MONGO_DATA_PATH

./test.sh: ligne 13: echo $MONGO_DATA_PATH : not found

MYSQL_DATA_PATH

./test.sh: ligne 13: echo $MYSQL_DATA_PATH : not found

问题

如何使用 $env_var 测试是否有环境变量?

最佳答案

您可以使用这里提到的方法:Is it possible to build variable names from other variables in bash?

因此相应地,您的代码将更改为以下内容:

#!/bin/sh
if test -e ../my_folder/.config
then
cat ../my_folder/.config | while read line; do

env_var="${line%=*}"
echo $env_var
eval "echo \$$env_var" # This works
done
fi

关于linux - 如何在 bash 中使用 var 检查现有环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409068/

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