2012-11-28 57 views
0

我注意到,在shell腳本中,當我們聲明一個變量時,不需要前面的美元符號,但是當我們想要稍後訪問這個變量時,我們應該在這個變量名前加上一個美元符號。

只是想:

#!/bin/sh 
VAR_1=Hello 
VAR_2=Unix 

echo "$VAR_1 $VAR_2" 

這是從其他語言不同,像Perl我們將始終與變量名前面的美元符號,我只是想知道有什麼好的理由shell腳本來完成它用這種方式,還是僅僅是一個慣例......?

回答

6

Shell是一種與Perl不同的語言,與C++不同是一種不同於Python的語言。您可以爲每種語言添加「具有不同規則」。

在殼狀VAR_1名稱的變量的標識,美元符號用於調用擴展。 $var被替換爲var的內容;如果設置了${var:-foo},則用var的內容替換;如果未設置變量,則用foo字替換。擴展也適用於非變量,例如你可以像${${var##*/}%.*}那樣鏈接擴展如果var包含具有完整路徑和擴展名的文件名,應僅保留文件基本名稱。

在Perl在變量前面的印記告訴Perl如何解釋該標識符:$var是一個標量,@var陣列,%var散列等等

在Ruby在varible前面的印記告訴紅寶石其範圍:var是一個局部變量,$var是全局變量,@var是一個對象的實例變量,而@@var是一個類變量。

在C++中,我們在變量名前沒有標記。

等等

+0

C++使用'm_'印記=^_^= – 2012-11-28 08:12:34

+1

如果你堅持做與誰似乎是一個新手的OP這樣一個笑話:'s_','m_'等前綴,一個常在C++中看到的不是簽名。它們是變量名稱的一部分,沒有什麼特別的。它是關於變量命名的幾個已知約定之一:所有實例/成員變量都以'm_'爲前綴,所有靜態(全局)變量都具有's_'等。約定也可以命名所有成員變量'varnameGOODSTUFF'和所有靜態像'varnameDONTDOTHIS'。 –

1

在外殼,$標誌是不變量名稱的一部分。它只是告訴shell用相同名稱的變量內容替換下列單詞,即$foo表示「在此處插入變量foo的內容」。

分配給變量時,因爲有你明確地不想插入新的內容,這是不使用;你想使用變量本身(在某些方面,這與取消引用指針類似)。

0

它基本上是一個語法約定。

DOS/.bat文件語法的工作方式相同。

1)創建一個變量,沒有元字符。

2),以「解除引用」的變量的內容,使用元字符。

DOS: 
set VAR=123 
echo %VAR% 
相關問題