将bash终端变量传递给bash脚本



如果我在Linux终端中,并且我开始设置变量,例如导出AGE=45

然后我有一个脚本从终端变量中读取用户数据并进行处理,这可能做到吗?

IE:
user@linux$ export AGE=45
user@linux$ ./age.sh
#script asks for input
read -p "what is your age?" scriptAGE
#user inputs variable set in terminal
$AGE

#回波输出

echo "your age is: " $scriptAGE" 

#应该说你的年龄是:45

没有终端变量这样的东西。read只是为变量scriptAGE指定一个字符串。

如果此字符串包含要扩展的一些$NAME,则可以对其应用eval,但这当然非常危险,因为可能会注入代码。

更安全的方法是使用envsubst,但这要求要替换的变量必须是环境变量。在您的情况下,AGE处于环境中,因此满足此条件。

在你的情况下,你必须做一个

envsubst <<<"$scriptAGE"

它将在stdout上打印scriptAGE的内容,并替换其中的所有环境变量。

变量不在输入中展开,只在脚本本身中展开。

您可以使用eval强制它将变量值处理为shell语法。

eval "echo 'your age is:' $scriptAGE"

但这也将处理其他shell语法。如果他们输入$AGE; rm *,则会显示他们的年龄为45岁,然后删除所有文件。

您可以直接执行

age=$1
echo "Your age is $1"

其中$1,$2,$3$N是按顺序传递的参数

然后运行你的脚本

bash script sh Noureldin

欲了解更多信息,请阅读:

  • 传递名称参数

最新更新