繁体   English   中英

在 shell 脚本中分配变量以在脚本之外使用

[英]Assigning a variable in a shell script for use outside of the script

我有一个设置变量的shell脚本。 我可以在脚本内部访问它,但我不能在脚本外部访问它。 是否可以使变量全局化?

正如预期的那样,在创建之前访问变量不会返回任何内容:

$ echo $mac

$

创建脚本以创建变量:

#!/bin/bash
mac=$(cat \/sys\/class\/net\/eth0\/address)
echo $mac
exit 0

正如预期的那样,运行脚本会给出当前的 mac 地址:

$ ./mac.sh
12:34:56:ab:cd:ef
$ 

在创建变量后访问该变量不返回任何内容,不期望:

$ echo $mac

$

有没有办法可以在命令行和其他脚本中访问这个变量?

子进程不能像那样影响父进程。

您必须使用. (dot) 命令——或者,如果你喜欢 C shell 符号, source命令——读取脚本(因此. scriptsource script ):

. ./mac.sh
source ./mac.sh

或者您在标准输出上生成赋值并使用eval $(script)来设置变量:

$ cat mac.sh
#!/bin/bash
echo mac=$(cat /sys/class/net/eth0/address)
$ bash mac.sh
mac=12:34:56:ab:cd:ef
$ eval $(bash mac.sh)
$ echo $mac
12:34:56:ab:cd:ef
$

请注意,如果在为 dot 或 source 命令指定脚本时不使用斜杠,则 shell 将在$PATH列出的目录中搜索脚本。 脚本不必是可执行的; 可读就足够了(只读是有益的,因为您不能意外运行脚本)。

目前尚不清楚路径名中的所有反斜杠除了混淆之外还应该做什么; 他们是不必要的。

有关生成此类脚本的先例,请参阅ssh-agent

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM