当我在bash shell中运行'set'命令时,我看到一个变量有一个值。但是,当我在bash脚本中运行'set'命令时,变量不存在。为什么?我该如何做到这一点?在bash中,为什么变量在shell中可见,但不在shell脚本中
tmp.sh包含#!/bin/bash
svcid=`set | grep ^SERIAL_NUMBER | awk '{ split($1,a,"=");print a[2] }'`
echo ${svcid}
AxOS(7iq1) root:/mnt/ax/scratch/roshi# set
--snip--
SERIAL_NUMBER=7iq1
--snip--
AxOS(7iq1) root:/mnt/ax/scratch/roshi#
我的shell脚本,如果我执行脚本如下,我没有得到任何输出
AxOS(7iq1) root:/mnt/ax/scratch/roshi# ./tmp.sh
AxOS(7iq1) root:/mnt/ax/scratch/roshi#
如果我执行脚本(首次提出Doon)
AxOS(7iq1) root:/mnt/ax/scratch/roshi# . ./tmp.sh
7iq1
AxOS(7iq1) root:/mnt/ax/scratch/roshi#
请发布一个(小)示例 – Useless 2013-04-26 18:29:05
通常当您运行一个脚本它运行在一个子shell。所以一旦退出,所有更改都会丢失。在当前的shell中运行它就像''运行一样。 script.sh',它将在当前shell中运行。这是否解决了这个问题?否则就像@Useless说的那样,例如请 – Doon 2013-04-26 18:30:48
@Doon:修正了它。但我为什么困惑。我以为。是给定文件的来源的同义词。我想这是有道理的。输入以#!/ bin/bash开头的当前文件,以便运行该脚本。那有意义吗? – 2013-04-26 18:50:23