Linux 如何在bash中注释参数列表
如何对函数的参数列表进行注释?我想做这样的事情,但这不起作用:Linux 如何在bash中注释参数列表,linux,bash,shell,comments,Linux,Bash,Shell,Comments,如何对函数的参数列表进行注释?我想做这样的事情,但这不起作用: my_func \ # This is for something arg_1 \ \ # This is for something else arg_2 \ \ # This is not not for anything arg_3 这显然不起作用。有什么办法可以实现这样的目标吗?下一个选项是这样的: my_func \ arg_1 \ # This is for something
my_func \
# This is for something
arg_1 \
\
# This is for something else
arg_2 \
\
# This is not not for anything
arg_3
这显然不起作用。有什么办法可以实现这样的目标吗?下一个选项是这样的:
my_func \
arg_1 \ # This is for something
arg_2 \ # This is for something else
arg_3 # This is not not for anything
这在我的书中不太可取,但也不起作用。有什么想法吗?问题归结为“如何在bash中进行内联评论”,技术上正确的答案是您不能。但是,您可以使用近似的内联注释,如中所示 因此,实现这一点的方法(不是无开销的,而是最接近我想要的)是: 或
问题归结为“如何在bash中生成内联注释”,技术上正确的答案是您不能。但是,您可以使用近似的内联注释,如中所示 因此,实现这一点的方法(不是无开销的,而是最接近我想要的)是: 或
使用命令替换作为伪注释既昂贵(您仍然需要派生shell并解析注释),也可能很危险(命令替换可以嵌套,并且仍然会执行)。更好的方法是将参数存储在一个数组中,这样就不会出现意外执行的情况
args=(
# This is for something
arg_1
# This is for something else
arg_2
# This is not not for anything
arg_3
)
my_func "${args[@]}"
如果您需要保持POSIX兼容,也就是说没有数组,我建议您只需在调用之前记录参数:
# Arg 1: this is for something
# Arg 2: this is for something else
# Arg 3: this is not for anything
my_func \
arg_1 \
arg_2 \
arg_3
使用命令替换作为伪注释既昂贵(您仍然需要派生shell并解析注释),也可能很危险(命令替换可以嵌套,并且仍然会执行)。更好的方法是将参数存储在一个数组中,这样就不会出现意外执行的情况
args=(
# This is for something
arg_1
# This is for something else
arg_2
# This is not not for anything
arg_3
)
my_func "${args[@]}"
如果您需要保持POSIX兼容,也就是说没有数组,我建议您只需在调用之前记录参数:
# Arg 1: this is for something
# Arg 2: this is for something else
# Arg 3: this is not for anything
my_func \
arg_1 \
arg_2 \
arg_3
这是可行的,对性能的影响很小,但并不完美:
my_func \
${IFS# This is for something } \
arg_1 \
\
${IFS# This is for something else } \
arg_2 \
\
${IFS# This is not not for anything } \
arg_3
这是可行的,对性能的影响很小,但并不完美:
my_func \
${IFS# This is for something } \
arg_1 \
\
${IFS# This is for something else } \
arg_2 \
\
${IFS# This is not not for anything } \
arg_3
我认为人们通常会对函数本身进行注释,可能会使用
--help
打印详细的用法,或者在调用函数时不带任何参数。@karakfa它是一个函数而不是脚本。这个函数有一个注释,我需要注释的是参数——为什么我把这个和那个传递给函数。我认为人们通常会注释函数本身,也许会用--help
或者在调用函数时不带参数来打印详细用法。@karakfa它是一个函数而不是脚本。这个函数有一个注释,我需要注释的是参数-为什么我把这个和那个传递给函数。为什么是否决票?这个解决方案完全有效,并且与许多其他问题的公认答案相同。无论是谁接受了这些答案,在这是否是一个好主意的问题上都和你一样错误。(如果你以前看到过这个答案,为什么要故意复制呢?)我认为这“不是一个好主意”,因为它在技术上很昂贵(每个评论都会产生一个无用的过程)。但我认为它比其他解决方案更具可读性,而且性能开销可以忽略不计。如果你读过我的答案,你就会看到这个链接,它回答了“如何在bash中进行内联评论”这个更一般的问题。问题本身不是重复的。@chepner所以我测试了我的假设()。在我的机器上,通过命令替换使用1001条内联注释花费了不到四分之一秒的时间:real 0m0.216s user 0m0.028s sys 0m0.048s
。在我的电脑上,通过命令替换使用1001条内联注释花费了Cygwin超过44秒的时间(但我没有否决这个答案)。为什么否决?这个解决方案完全有效,并且与许多其他问题的公认答案相同。无论是谁接受了这些答案,在这是否是一个好主意的问题上都和你一样错误。(如果你以前看到过这个答案,为什么要故意复制呢?)我认为这“不是一个好主意”,因为它在技术上很昂贵(每个评论都会产生一个无用的过程)。但我认为它比其他解决方案更具可读性,而且性能开销可以忽略不计。如果你读过我的答案,你就会看到这个链接,它回答了“如何在bash中进行内联评论”这个更一般的问题。问题本身不是重复的。@chepner所以我测试了我的假设()。在我的机器上,通过命令替换使用1001条内联注释花费了不到四分之一秒的时间:real 0m0.216s user 0m0.028s sys 0m0.048s
。在我的电脑上,通过命令替换使用1001条内联注释花费了Cygwin超过44秒的时间(但我没有否决这个答案)。感谢您提供了更多选项。不幸的是,我们的样式约定禁止bash数组,并且函数的实际参数数量远远超过3个,这使得您的第二个建议不太可取。数组在bash程序中非常有用,并且从版本2.0(1997)起就得到了支持。禁止使用它们的样式约定是一个非常糟糕的主意。如果需要可移植的shell代码,那么将“bash”标记从问题中删除会很有帮助。我们是一个很小的团队,但我们的想法是“如果需要真实的数据结构,请使用python”,这是我非常喜欢的。禁止使用有用的bash功能可能会产生意想不到的后果,导致人们编写不必要的糟糕bash代码,或者花大量时间不必要地将Bash代码翻译成Python。更有用的样式约定规则是建议不要使用大量(位置)函数参数。Bash函数的局限性通常意味着您需要过多的函数参数,或者使用全局变量将数据传递给函数。这些都是强有力的信号,表明Python可能是一种更适合该程序的语言。感谢您提供更多选项。不幸的是,我们的样式约定禁止bash数组,并且实际参数的数量为t