Bash
我怎樣才能更好地輸入延續線?
通常,我在單獨的行上鍵入長命令,如下所示:
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[@]}"