Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash中注释参数列表_Linux_Bash_Shell_Comments - Fatal编程技术网

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