是否可以在 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 规范)有深入的理解。 ...这就像标记c
和c++
也是不受欢迎的。它们是不同的语言。一个问题应该针对一个或另一个 - 即使在那里,重叠甚至更大。
【参考方案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 和命令替换来执行命令并捕获它们的输出。不是直接的,但您可以将参数存储在定义为多行的 数组 中,并且这些行之间可以有 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 脚本中的多行命令中包含内联注释? [复制]的主要内容,如果未能解决你的问题,请参考以下文章