我想编写一个脚本,该脚本将使用标志/开关接受用户输入,然后从该数据中设置ENV变量。
该文件名为“ set_env.zsh”。
!#/bin/zsh
while getopts eilt option
do
case "${option}"
in
e) ENVIRON=${OPTARG};;
i) ID=${OPTARG};;
l) LOGIN=${OPTARG};;
t) TOKEN=${OPTARG};;
esac
echo $option
done
if [ $#ENVIRON -gt 0 ];then
export PRINTER_ENV=$ENVIRON
echo $PRINTER_ENV
elif [ $#ID -gt 0 ];then
export PRINTER_ID=$ID
echo $PRINTER_ID
elif [ $#LOGIN -gt 0 ];then
export PRINTER_EMAIL=$LOGIN
echo $PRINTER_EMAIL
elif [ $#PRINTER_TOKEN -gt 0 ];then
export PRINTER_TOKEN=$TOKEN
echo $PRINTER_TOKEN
fi
要执行脚本:
source set_env.sh -e DEVELOPMENT -i printer_01 -l my_email@email.com -t my_tokens
当我使用printenv
检查ENV变量时,没有设置任何变量。
但是,当我运行相同的脚本并在其中放入export TEST=test
作为要执行的第一行实际代码时,然后运行printenv
之后,该脚本会成功保存ENV变量
对此事有任何见识,将不胜感激!
答案 0 :(得分:2)
您的region: Queensland
fuel type: Black Coal
value: 5536.51307
---
region: Queensland
fuel type: Gas
value: 560.24621
---
region: Queensland
fuel type: Liquid Fuel
value: 0.0
---
region: Queensland
fuel type: Other
value: 23.9
---
region: Queensland
fuel type: Hydro
value: 18.415
---
# etc.
字符串不允许使用选项参数。
更改自:
getopts
收件人:
while getopts elit option
...告诉while getopts e:l:i:t option
,每个getopts
,-e
,-l
或-i
之后都应该有选项参数。否则,getopts第一次在参数列表中看到非选项(例如,在示例中为字符串-t
)时,将退出循环(通过返回false值)。
此外,要提高与zsh以外的Shell的兼容性,请考虑更改:
DEVELOPMENT
...到...
# This is zsh-only
if [ $#FOO -gt 0 ]; then