如何在終端機中為變數賦值?

如何在終端機中為變數賦值?

在終端機中,如何設定新變數並為其賦值?假設我想比較兩個具有長文件名的文件,然後還執行一些其他操作。由於檔案名稱很長,我想建立兩個變量,為每個變數賦值並將其用作佔位符。我需要類似以下內容:

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作為其第一個命令行參數,存儲在var2pass 中的文件名作為其第二個命令行參數。這會導致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

注意:如果您的檔案名稱有空格,最好對檔案名稱和變數加雙引號,尤其是在對它們執行操作時

相關內容