如果我在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
欲了解更多信息,请阅读:
- 传递名称参数