Bash

我怎樣才能更好地輸入延續線?

  • May 2, 2021

通常,我在單獨的行上鍵入長命令,如下所示:

myapp -a foooooooo1          \
     -b foooo2              \
     -c foooooooooooooooo3  \
     -d foooooooo4          \
         bar

但我想將其更改為以下內容:

myapp  -a foooooooo1  
   \  -b foooo2
   \  -c foooooooooooooooo3
   \  -d foooooooo4
         bar

我想這樣做是因為當我更改第一段程式碼時,我需要手動調整反斜杠,以便它們在彼此下方正確對齊。對於第二段程式碼,如果我更改其中一個參數,反斜杠將不會移動。

shell 命令中不帶引號的反斜杠的作用是轉義下一個字元。另一種說法是,如果該字元具有特殊含義,則反斜杠會刪除下一個字元的特殊含義。

換行符是命令終止符,就像;和其他幾個字元一樣。反斜杠從換行符中刪除該函式,以便命令可以在下一行繼續。順便說一句,這就是為什麼在需要繼續的行尾的反斜杠之後甚至不能有空格字元,因為反斜杠不會轉義實際的換行符。

您提出的程式碼不會被 shell 正確解析。相反,它會嘗試將每一行作為單獨的命令執行。

在某些情況下可能有用的另一種方法是,如果您的 shell 支持數組(bash例如,支持),則將命令儲存在數組中,如下所示:

mycommand=(
   myapp -a 'foo foo'  
         -b 'bar bar'
         -c 'baz baz'
         -d 'qux qux'
             bar
)

此數組賦值中的換行符僅用作數組元素之間的分隔符,就像空格一樣。需要嵌入空格的元素需要被引用,如這裡的範例所示(就像在任何情況下都需要在命令行上引用它們一樣)。

要執行該命令,您將使用

"${mycommand[@]}"

請注意,雙引號是必不可少的。它們確保數組的每個元素都被單獨引用。

或者,僅對參數使用數組:

myapp_args=(
   -a 'foo foo'  
   -b 'bar bar'
   -c 'baz baz'
   -d 'qux qux'
       bar
)

接著:

myapp "${myapp_args[@]}"

引用自:https://unix.stackexchange.com/questions/647651