我所遇到的shell腳本行內容如下的Unix shell腳本 - 結腸癌的目的
Pfile=/params/tech1.dat:$Pfile;export Pfile
的目的是爲了創建並導出一個名爲Pfile
含值變量"/params/tech1.dat"
但什麼是`:$ Pfile``在做什麼?具體是冒號服務的目的是什麼?
已經瀏覽了大量的Unix信息源和手冊,但找不到有助於解釋上述內容的示例。
我所遇到的shell腳本行內容如下的Unix shell腳本 - 結腸癌的目的
Pfile=/params/tech1.dat:$Pfile;export Pfile
的目的是爲了創建並導出一個名爲Pfile
含值變量"/params/tech1.dat"
但什麼是`:$ Pfile``在做什麼?具體是冒號服務的目的是什麼?
已經瀏覽了大量的Unix信息源和手冊,但找不到有助於解釋上述內容的示例。
冒號可用作列出路徑的許多變量的分隔符。這只是爲此目的而按慣例選擇的角色。
這裏,代碼片段分配給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函數,它什麼都不做。
最常見的例子是['PATH'](http://kb.iu.edu/data/acar.html)。可能值得說明的是,這個scriptlet並不是_creating_這個''Pfile'變量,它正在對它有所瞭解。 –
實際上,分配不會對分配的值進行分詞。因此,即使$ Pfile最初包含空白,引用也是不必要的。 –
@MichałPolitowski你是對的,我編輯了答案。 – damienfrancois
在這種情況下,您將現有值$Pfile
附加到/params/tech1.dat
。如果沒有現有值,您將獲得/params/tech1.dat:
作爲分配給$Pfile
的值。 :
充當兩個值之間的分隔符。
通常,:
用作shell變量中的目錄的分隔符,例如PATH
和LD_LIBRARY_PATH
。不知道你是否有一定的理由在變量中使用:
。
嚴格地說,你會得到'/params/tech1.dat:' –
或者如果你已經完成了'set -o error'或'set -u' –
這預先設置路徑/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
正如其他人所說,結腸(:
)是通常用作路徑或字段分隔符。
':'在給定的上下文中沒有任何意義 - 它只是文本的一部分。但是,'$ PFile;'被替換爲PFile變量的當前值。要了解':'在相關上下文中的含義,找出PFile在哪裏使用(以及如何)。在所述分配之前和之後檢查PFile可能是有用的。 – user2864740