終端(cmd,bash,powershell) 命令換行總結

場景解析

我在使用Windows批處理(cmd/bat)過程中遇到了單條命令過長的問題.
爲了使腳本書寫工整,需要將單條執行的命令跨行書寫.如下面代碼:

echo Hello Code World

現在我想將CodeWorld切分到第二行和第三行時,需要在前兩行的行末添加尖括號^.
注意尖括號後面不能有其他字符(包括空格),否則不生效
如果添加了其他字符的話,尖括號前面的空格會被打印出來.

echo Hello ^
Code ^
World

這時終端會將這三行中的代碼解析爲一行命令並加以執行.

使用示例

下面是我使用mvn命令生成maven工程的代碼:

; cmd下單條 Maven 命令跨行書寫
mvn archetype:generate ^
-DgroupId=com.example ^
-DartifactId=hutoolTest ^
-DarchetypeArtifactId=maven-archetype-quickstart ^
-DinteractiveMode=false

引申

同理在PowerShell下要想實現同樣的效果需要用到`反引號.

# powershell 下單條 Maven 命令跨行書寫
mvn archetype:generate `
-DgroupId=com.example `
-DartifactId=hutoolTest `
-DarchetypeArtifactId=maven-archetype-quickstart `
-DinteractiveMode=false

Bash 下實現同樣的效果則要用到\反斜槓.

# bash 下單條 Maven 命令跨行書寫
mvn archetype:generate \
-DgroupId=com.example \
-DartifactId=hutoolTest \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

命令跨行書寫 實現原理

之前一直不明白爲什麼通過行尾添加^,`,\可以實現命令的跨行書寫,可能是因爲我的學習開端不是很好吧,一開始就找錯了方向.其實這裏的三個字符分別爲 cmd,powershellbash腳本語言中的轉義字符.

在所有腳本語言中,都會有一些控制字符,它們無法像普通字符一樣可以直接被表示出來.比如最常見的換行符製表符等等.

爲了能夠將它們表示出來,所有編程語言中都會設置轉義字符來對那些無法直接表示的字符進行處理.

比如換行符:
  • cmd中的表示方式爲^n,
  • 而在powershell中的表示方式爲`n;
  • bash中的表示方式爲 \n

那麼我們的轉義字符放在每行的行尾(後面不能有其他字符包括換行符)又可以表示什麼意思呢?

轉義字符放在行尾表示轉義換行符

這裏我們以bash舉例

我們可以通過轉義字符\n來表示換行符,同時我們也可以使用回車鍵表示換行符,通過回車鍵表示的換行符如果不加設置的話其實是無法直接顯示的,但是會表現爲文本的換行.

如果我們不希望終端解析通過回車鍵實現的換行符爲其本身的意思的話,則需要在每一行的行尾也就是換行符之前添加轉義字符來轉義換行符,轉義後的換行符不再表示爲換行的意思,而是退化成爲了一個普通的空白字符.

換行符在終端解釋器中會被解析爲命令的結束,但是如果在添加了轉義字符後,原本的換行符不再表示其命令結束的 含義,而是退化爲了一個空白字符,這裏的空白字符不能認爲它和空格的作用是一樣的.

使用價值分析

其實這段解析本身用處並不大,我們在生活中也不會到處用到單條命令的跨行書寫問題,本身有強迫症,希望能夠書寫工整的腳本語言的同學應該是個福音吧.

參考資料

Split long commands in multiple lines through Windows batch file

bat單條命令跨多行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章