1

bash シェルで「set」コマンドを実行すると、変数に値が含まれていることがわかります。ただし、bash スクリプトで「set」コマンドを実行すると、変数が存在しません。なんで?どうすればこれを実現できますか?

AxOS(7iq1) root:/mnt/ax/scratch/roshi# set
--snip--
SERIAL_NUMBER=7iq1
--snip--
AxOS(7iq1) root:/mnt/ax/scratch/roshi# 

私のシェルスクリプト 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# ./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# 
4

2 に答える 2

3

一部の (必ずしもすべてではない) シェル変数は、環境へのエクスポート用にマークされています。子プロセス (シェル スクリプトなど) では、これらの変数のみが表示されます。例えば:

$ x=3         # shell variable
$ export y=5  # shell variable exported to the environment
$ cat example.sh
echo "value of x: $x"
echo "value of y: $y"
$ bash example.sh
example of x:
example of y: 5
于 2013-04-26T18:38:26.637 に答える
0

これは、シェル スクリプトが呼び出し元とは別の環境で別のプロセスで実行されるためです。を使用しenv VAR=[value] [script-command]てこの問題を解決します。あなたは例を求めました、ここに行きます:

% bash # I use zsh and this is a paste from the terminal
$ echo "echo $VAR" > /tmp/echo.sh
$ sh /tmp/echo.sh

$ env VAR='hello' sh /tmp/echo.sh
hello
$
于 2013-04-26T18:31:43.467 に答える