在終端機中,如何設定新變數並為其賦值?假設我想比較兩個具有長文件名的文件,然後還執行一些其他操作。由於檔案名稱很長,我想建立兩個變量,為每個變數賦值並將其用作佔位符。我需要類似以下內容:
set var1 = 'long-file-name1'
set var2 = 'long-file-name2'
diff var1 var2
答案1
您的問題中的偽代碼(或其他 shell 或程式語言的程式碼)將轉換為以下 Bash 命令:
var1='long-file-name1'
var2='long-file-name2'
diff "$var1" "$var2"
語法$var1
是參數擴充。這會將變數替換var1
為它的值——在本例中,替換為其中儲存的檔案名稱。不含引號的參數擴展觸發器分詞(也稱為“字段分割”)和通配(也稱為“文件名擴展”和“路徑名擴展”)。通常您不希望發生這些進一步的擴展。除非你明確知道你想要它們, 你應該確保附上所有出現的參數擴展雙引號。 (單引號甚至更強大——它們也可以防止參數擴展的發生。
它運行diff
命令,其中存儲的文件名var1
作為其第一個命令行參數,存儲在var2
pass 中的文件名作為其第二個命令行參數。這會導致diff
比較文件的內容,如您所願,就像您運行時一樣:
diff 'long-file-name-1' 'long-file-name-2'
您會注意到我沒有使用該export
命令。這是因為,在這種情況下,export
命令是既不必要也不合適為了你正在做的事情。當變數的值只需要在 shell 中擴展時—而不是由從 shell 啟動的程式存取--那你不需要(也不應該)使用export
.
如果您的系統有一個奇怪的diff
命令,它從調用的環境變數中讀取檔案名var1
,而var2
不是將檔案名稱作為命令列參數,那麼您將需要匯出變數。但事實並非如此diff
。該diff
命令不存取您的變量,也不了解任何有關您的變數的資訊。 shell 正在擴展它們以產生參數,然後傳遞給diff
.
答案2
您只需透過分配即可將檔案名稱儲存在 bash 中的變數中
例如:variable=filename && variable2=filename2
然後你可以diff
像這樣使用這些變數的兩個文件
diff $variable $variable2
注意:如果您的檔案名稱有空格,最好對檔案名稱和變數加雙引號,尤其是在對它們執行操作時