[Linux] 觀察在不同的寫法下,Shell 變數會否傳遞至子行程
在 Linux shell 裡面,
有時會用到 NAME1=VALUE2 NAME2=VALUE2 program arg...
的方式,
帶環境變數給子行程 program。
但如果是用 for NAME in VALUE1 VALUE2 VALUE3; do program arg...; done
的方式的話,
這些變數也會帶下去嗎?這是我的疑問…
多想無益,直接來測試吧~
首先寫一個 test1.sh,裡面就是印出 PLAT 這個變數的值,
接著呼叫 test2.sh:
echo PLAT in test1=${PLAT} sh test2.sh
test2.sh 就只印出 PLAT 變數的值:
echo PLAT in test2=$PLAT
來看看 for NAME in VALUE1 VALUE2 VALUE3; do program arg...; done
這種寫法吧~
子行程看來都讀不到 PLAT 的值,
看起來這種寫法比較類似單純的 NAME=VALUE1
宣告,
變數只停留在當前的 shell session,不會帶給叫起來的子行程:
testuser@localhost ~ $ for PLAT in a b c; do sh test.sh; done PLAT in test1= PLAT in test2= PLAT in test1= PLAT in test2= PLAT in test1= PLAT in test2=
如果是 NAME1=VALUE2 NAME2=VALUE2 program arg...
的方式的話,
就可以把 PLAT 變數值帶給子行程、孫行程(及其子孫) 了,
應該比較類似 export NAME=VALUE1
的寫法:
testuser@localhost ~ $ for PLAT in a b c; do PLAT in test1=$PLAT sh test.sh; done PLAT in test1=a PLAT in test2=a PLAT in test1=b PLAT in test2=b PLAT in test1=c PLAT in test2=c
Linux Shell 程式真的蠻多奇特要注意的地方呢…
(本頁面已被瀏覽過 148 次)