我注意到,在shell腳本中,當我們聲明一個變量時,不需要前面的美元符號,但是當我們想要稍後訪問這個變量時,我們應該在這個變量名前加上一個美元符號。
只是想:
#!/bin/sh
VAR_1=Hello
VAR_2=Unix
echo "$VAR_1 $VAR_2"
這是從其他語言不同,像Perl
我們將始終與變量名前面的美元符號,我只是想知道有什麼好的理由shell腳本來完成它用這種方式,還是僅僅是一個慣例......?
我注意到,在shell腳本中,當我們聲明一個變量時,不需要前面的美元符號,但是當我們想要稍後訪問這個變量時,我們應該在這個變量名前加上一個美元符號。
只是想:
#!/bin/sh
VAR_1=Hello
VAR_2=Unix
echo "$VAR_1 $VAR_2"
這是從其他語言不同,像Perl
我們將始終與變量名前面的美元符號,我只是想知道有什麼好的理由shell腳本來完成它用這種方式,還是僅僅是一個慣例......?
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++中,我們在變量名前沒有標記。
等等
在外殼,$
標誌是不變量名稱的一部分。它只是告訴shell用相同名稱的變量內容替換下列單詞,即$foo
表示「在此處插入變量foo
的內容」。
分配給變量時,因爲有你明確地不想插入新的內容,這是不使用;你想使用變量本身(在某些方面,這與取消引用指針類似)。
它基本上是一個語法約定。
DOS/.bat文件語法的工作方式相同。
1)創建一個變量,沒有元字符。
2),以「解除引用」的變量的內容,使用元字符。
DOS:
set VAR=123
echo %VAR%
C++使用'm_'印記=^_^= – 2012-11-28 08:12:34
如果你堅持做與誰似乎是一個新手的OP這樣一個笑話:'s_','m_'等前綴,一個常在C++中看到的不是簽名。它們是變量名稱的一部分,沒有什麼特別的。它是關於變量命名的幾個已知約定之一:所有實例/成員變量都以'm_'爲前綴,所有靜態(全局)變量都具有's_'等。約定也可以命名所有成員變量'varnameGOODSTUFF'和所有靜態像'varnameDONTDOTHIS'。 –