是否可以在 shell 脚本中的多行命令中包含内联注释? [复制]

Posted

技术标签:

【中文标题】是否可以在 shell 脚本中的多行命令中包含内联注释? [复制]【英文标题】:Is it possible to have inline comments in multiple line commands in shell scripts? [duplicate] 【发布时间】:2021-05-20 14:04:57 【问题描述】:

我知道我可以在 bash 中使用 \ 分隔长命令 - 有没有办法编写内联 cmets?

例如:

wget \
  # Needed to get to end of around 100 pages of results
  --level=0 \
  # Save into downloads directory
  --directory=downloads \
  --recursive \
  # Normally wget won't span hosts, and .example.com use a CDN
  --span-hosts --domains='assets.publishing.example.com,www.example.com' \
  # Only care about links matching this regex
  --accept-regex 'assets|swag' --regex-type pcre 
  # The site we actually want to scrape
  'https://www.example.com/swag'

如果可以使用 zsh pwsh 或类似方法,我也很感兴趣。

【问题讨论】:

请一次只标记一个shell。 我会选择 bash,并针对 powershell 提出一个单独的问题(它来自一个足够不同的生态系统,因此您不会找到很多在 POSIX-y shell 和 Windows 方面都是专家的人- y shells,所以一个理想情况下涵盖两者的单一答案是不可能的,除非它综合了不同人的两个答案——这意味着这些人都不会得到回答这个问题的检查)。 顺便说一句,之前***.com/questions/9522631/… 上的 bash 似乎有人问过这个问题 我对 bash 有深入的了解,并且对 zsh 和 powershell 有 一些 的经验——但我的 zsh 经验的结果是“尝试将它用作我的主要shell 六个月,发现它导致我在为其他更严格 POSIX 兼容的 shell 编写代码时出错,并放弃了它”,15 年前。同样,我在进行 Windows CTF 练习时使用 powershell,但这并不意味着我对任何其他 shell 语言的 bash(或 POSIX sh 规范)有深入的理解。 ...这就像标记cc++ 也是不受欢迎的。它们是不同的语言。一个问题应该针对一个或另一个 - 即使在那里,重叠甚至更大。 【参考方案1】:

是的,你可以,你只需要像这样在你的 cmets 周围添加 ``:

wget \
  `# Needed to get to end of around 100 pages of results`

  --level=0 \\
  `# Save into downloads directory`

  --directory=downloads \\
  --recursive \

【讨论】:

是的,如果你这样写 ,它不会是命令替换,但你会得到一个文字反引号。无论如何,这不是评论,命令替换执行代码里面,所以如果你犯了把其他东西放在那里的错误(例如,如果你忘记了#)......还有, Bash 为每一个命令替换都创建了一个副本,所以你浪费了你的“cmets”的执行时间。只需使用 cmets 作为 cmets 和命令替换来执行命令并捕获它们的输出。【参考方案2】:

不是直接的,但您可以将参数存储在定义为多行的 数组 中,并且这些行之间可以有 cmets。

wget_args=(
  # Needed to get to end of around 100 pages of results
  --level=0
  # Save into downloads directory
  --directory=downloads
  --recursive
  # Normally wget won't span hosts, and .example.com use a CDN
  --span-hosts --domains='assets.publishing.example.com,www.example.com'
  # Only care about links matching this regex
  --accept-regex 'assets|swag' --regex-type pcre 
  # The site we actually want to scrape
  'https://www.example.com/swag'
)
wget "$wget_args[@]"

【讨论】:

谢谢查尔斯!需要等待接受这个答案,但这是迄今为止最好的。 仅供参考:此答案的要点已经在对其中一个重复项的答案中给出,***.com/a/9522766/14122。保留此内容,但标记社区 Wiki 以供参考。

以上是关于是否可以在 shell 脚本中的多行命令中包含内联注释? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Flash 中包含所有类文件

如何在bash shell脚本中包含文件

在 CMake 中包含 NSIS 脚本

将参数传递给shell脚本中包含的Python脚本

shell脚本--内容查找之grep命令

Shell中的特殊位置参数变量全文收录