當我在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