命令中间可以加注释吗?

命令中间可以加注释吗?

我想导出多个变量,为此我决定将它们放在一个export命令中,这样我就不会export无缘无故地多次调用,这(逻辑上)会更慢(对吗?)

像这样:

export\
       var1=a\
       var2=b\
       var3=c
       
       [ ... ]

       varn=zzz

但这不允许我再在两者之间添加评论:

export\
       # Comment
       var1=a\
       var2=b # Comment \
       var3=c\
       
       [ ... ]

       varn=zzz

因为反斜杠将所有内容放在同一行。

我怎样才能评论我想要导出的变量?我想我可以只调用export每个变量,但我不想仅仅为了评论而放慢我的脚本。

编辑重复消息:虽然其他问题的答案也可以解决我的问题,但我相信这里的答案和评论也确实具有一定的价值

答案1

是的,有点。您几乎可以在任何地方放置命令替换,并且可以在命令替换中放置注释。它很丑,但很有效。

export\
       $(# Comment
       ) \
       var1=a\
       var2=b $(# Comment 
       ) \
       var3=c

但是,如果您确实无法通过其他方式做到这一点,那么您就会这样做。几乎在所有情况下,您可以这样做,将命令分成多个部分,并在必要时在每个部分附加注释,更具可读性。如果您选择合理的变量名称,一些注释甚至可能没有必要。

这绝对不是你为了性能而做的事情。调用外部命令有点昂贵,但调用内置命令则不然。拆分export命令不太可能对运行.zshrc. (我在下面进行了基准测试,如果您对这一行进行基准测试,它实际上确实会产生影响,但在典型的规模上.zshrc,这完全可以忽略不计。)无论如何,调用内置命令比命令替换更便宜,所以$(…)上面的事情会让你的脚本变慢。


调用export每个变量是否比每个变量调用一次慢?是有点。至少对于我测试的特定代码、版本和平台:差异足够小,以至于可能会有所不同。

% time zsh -c 'for ((i=0; i<$1; i++)) { export var1=foo var2=bar; }' 1 1000000
zsh -c 'for ((i=0; i<$1; i++)) { export var1=foo var2=bar; }' 1 1000000  1.36s user 0.24s system 99% cpu 1.612 total
% time zsh -c 'for ((i=0; i<$1; i++)) { export var1=foo; export var2=bar; }' 2 1000000                            
zsh -c 'for ((i=0; i<$1; i++)) { export var1=foo; export var2=bar; }' 2   1.67s user 0.43s system 99% cpu 2.097 total

然而,添加命令替换会使速度慢 100 倍! (注意迭代次数的减少。)

% time zsh -c 'for ((i=0; i<$1; i++)) { export var1=foo var2=bar $(); }' 3 10000
zsh -c 'for ((i=0; i<$1; i++)) { export var1=foo var2=bar $(); }' 3 10000  1.33s user 1.00s system 107% cpu 2.165 total

相关内容