将单行命令拆分为两部分,以便在美学上更加“结构化”

4 shell

我有以下从脚本运行的命令。在脚本文件中,它写在这个有点长的行中:

sudo zip -r /var/www/html/html-$(date +\%F-\%T-).zip /var/www/html -x /var/www/html/wp-content/cache
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但我想将此命令水平拆分为几部分,例如:

sudo zip -r /var/www/html/html-$(date +\%F-\%T-).zip /var/www/html || -x /var/www/html/wp-content/cache
Run Code Online (Sandbox Code Playgroud)

||非执行字符应该在哪里,这些字符将仅用于将命令“aeshtetic”拆分为两部分。

或者甚至可能像垂直一样:

sudo zip -r /var/www/html/html-$(date +\%F-\%T-).zip /var/www/html 
-x /var/www/html/wp-content/cache
Run Code Online (Sandbox Code Playgroud)

您认为实现这一目标的最佳方法是什么?

use*_*253 9

如果我正确理解您要实现的目标,您应该使用\. 这允许将长命令分成多行。

sudo zip -r \
    /var/www/html/html-$(date +\%F-\%T-).zip \
    /var/www/html \
    -x /var/www/html/wp-content/cache
Run Code Online (Sandbox Code Playgroud)

请记住,斜杠前的空格很重要。外壳不会自动插入它们,所以命令像

echo\
"asdf"
Run Code Online (Sandbox Code Playgroud)

可能会导致“找不到命令”(@ilkkachu)。

  • 并且 ** 没有** 斜线后面的空格! (5认同)
  • 换句话说:这里使用反斜杠来转义紧随其后的换行符,因此 shell 不会将其解释为命令结束,而只是一个文字换行符。所以反斜杠 ** 就在换行符之前**。 (3认同)
  • 嗯,为什么 `echo\<nl> asdf` 会报错?(或者这只是一个演示错别字?)反斜杠吃掉换行符,下一行前面的空格将单词分开,导致两个单词“echo”和“asdf”。`echo\<nl>asdf` 会有所不同,这与 `echoasdf` 相同,它可能给出“找不到命令” (3认同)