上下文
我在寫一個讀取.config文件的.sh文件。在這個.config文件(我不能編輯)中有一些變量。我想測試這些變量是否定義爲環境變量。如何在bash中使用var檢查現有的環境變量?
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
環境變量?
便攜,安全,簡單:選擇任意兩個。 – chepner
我聽說如果使用'eval',我肯定會做一件壞事,但在我的情況下,我沒有任何選擇。 – darckcrystale