Discussion:
[問題] 自定變數與環境變數
(时间太久无法回复)
非常念舊
2013-12-22 12:02:39 UTC
Permalink
Linux之神的鳥哥,在基本第十一章介紹自定變數與環境變數的差別是一個不能

給子程式使用,另一個可以,而且他說明"在一個Bash底下的任何指令"都是新

的子程式",照他這麼說我感覺怪怪的。


your_path=~/test //自定變數路徑

cd ${your_path} //可以切換目錄到test


既然第二個指令是子程式(新的shell),那他應該看不到這your_path變數阿

第一行的指令應該要export your_path=~/test變成環境變數才對阿!?可是上面

指令卻行得通...為何?是我理解錯誤?這也與我前幾小時問的makefile問題相關..

謝謝前輩。


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.155.200
蠻王科科
2013-12-22 12:40:59 UTC
Permalink
我的理解是這樣:
shell的指令有些會fork出子進程來實行 有些就在本shell實行

會fork的:
- 外部程式
- 用&實行的shell指令
不會fork的:
- "正常的" shell指令

我把你寫的兩行叫做例1. 例1是不會fork的一型
對於會fork的那些, 才有環境變數有沒有經過export的區別
例2: 子進程可以看到經export的變數
$ export a=1
$ bash -c 'echo $a'
=> 1

例3: 子進程看不到未經export的變數
$ b=1
$ bash -c 'echo $b'
=> (空白)

※ 引述《gn00618777 (非常念舊)》之銘言:
: Linux之神的鳥哥,在基本第十一章介紹自定變數與環境變數的差別是一個不能
: 給子程式使用,另一個可以,而且他說明"在一個Bash底下的任何指令"都是新
: 的子程式",照他這麼說我感覺怪怪的。
: your_path=~/test //自定變數路徑
: cd ${your_path} //可以切換目錄到test
: 既然第二個指令是子程式(新的shell),那他應該看不到這your_path變數阿
: 第一行的指令應該要export your_path=~/test變成環境變數才對阿!?可是上面
: 指令卻行得通...為何?是我理解錯誤?這也與我前幾小時問的makefile問題相關..
: 謝謝前輩。

--
祖祖 拎北不做人啦!

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.160.120.147

Loading...