2014-01-09 34 views
2

我所遇到的shell腳本行內容如下的Unix shell腳本 - 結腸癌的目的

Pfile=/params/tech1.dat:$Pfile;export Pfile 

的目的是爲了創建並導出一個名爲Pfile含值變量"/params/tech1.dat"

但什麼是`:$ Pfile``在做什麼?具體是冒號服務的目的是什麼?

已經瀏覽了大量的Unix信息源和手冊,但找不到有助於解釋上述內容的示例。

+0

':'在給定的上下文中沒有任何意義 - 它只是文本的一部分。但是,'$ PFile;'被替換爲PFile變量的當前值。要了解':'在相關上下文中的含義,找出PFile在哪裏使用(以及如何)。在所述分配之前和之後檢查PFile可能是有用的。 – user2864740

回答

2

冒號可用作列出路徑的許多變量的分隔符。這只是爲此目的而按慣例選擇的角色。

這裏,代碼片段分配給Pfile通過評估右手站點獲得的字符串,該字符串包含常量字符串/params/tech1.dat:和變量$Pfile。如果它寫成Pfile="/params/tech1.dat:$Pfile";export Pfile,它可能會更清楚地顯示出來。

在你的具體的例子,/params/tech1.dat前置到$Pfile,這樣,假設$Pfile/other/path則變得/params/tech1.dat:/other/path。這被許多程序理解爲:請參閱/params/tech1.dat然後在other/path

常見例子:PATH, LD_LIBRARY_PATH, LIBRARY_PATH, CPATH, PYTHONPATH

如果$Pfile是先前未設置或空的,它與一個後冒號結束:/params/tech1.dat:其可以或者可以不取決於你的程序,應理解爲工作目錄(以上列舉的例子就是這種情況)。

請注意,:是許多文件系統中路徑名中的有效字符,因此在極少數情況下,某些路徑包含一個路徑名時,它應該可能會被轉義。

最後,請注意,在其他上下文中,:是一個Bash函數,它什麼都不做。

+1

最常見的例子是['PATH'](http://kb.iu.edu/data/acar.html)。可能值得說明的是,這個scriptlet並不是_creating_這個''Pfile'變量,它正在對它有所瞭解。 –

+0

實際上,分配不會對分配的值進行分詞。因此,即使$ Pfile最初包含空白,引用也是不必要的。 –

+0

@MichałPolitowski你是對的,我編輯了答案。 – damienfrancois

0

在這種情況下,您將現有值$Pfile附加到/params/tech1.dat。如果沒有現有值,您將獲得/params/tech1.dat:作爲分配給$Pfile的值。 :充當兩個值之間的分隔符。

通常,:用作shell變量中的目錄的分隔符,例如PATHLD_LIBRARY_PATH。不知道你是否有一定的理由在變量中使用:

+1

嚴格地說,你會得到'/params/tech1.dat:' –

+0

或者如果你已經完成了'set -o error'或'set -u' –

2

這預先設置路徑/params/tech1.dat到任何Pfile可能已經在其中。所以Pfile可能已經是:

echo $Pfile 
/foo/bar:/blah/bleh 

那麼你就執行語句:

Pfile=/params/tech1.dat:$Pfile;export Pfile 

,你會得到:

echo $Pfile 
/params/tech1.dat:/foo/bar:/blah/bleh 

正如其他人所說,結腸(:)是通常用作路徑或字段分隔符。