脚本出于某种目的使用bash
变量Q
(超出此问题的范围):
Q=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
由于此脚本用于每个字节都很重要的环境,因此这是浪费。但是一些解决方法,比如
Q=0$(seq -s "" 9)$(echo {A..Z}|tr -d " ")
(对于C
语言环境)更糟。我是不是太盲目了,看不到紧凑生成如此简单序列的明显技巧?
脚本出于某种目的使用bash
变量Q
(超出此问题的范围):
Q=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
由于此脚本用于每个字节都很重要的环境,因此这是浪费。但是一些解决方法,比如
Q=0$(seq -s "" 9)$(echo {A..Z}|tr -d " ")
(对于C
语言环境)更糟。我是不是太盲目了,看不到紧凑生成如此简单序列的明显技巧?
对于任何能够大括号扩展的外壳:
使用
printf
:-->
反引号而不是
$()
保存一个字节。特别是对于 Bash,printf -v var
将 printf 放入变量中很好,但不比反引号短。我知道的最简单的方法是使用
bash
方式:(
sed
用于删除符号之间的空格。括号之间的空格很重要,否则您将看到从 0 到 9 和 A 到 Z 的所有组合0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z1A1B1C...
)建议您可以像这样缩短命令:
框架挑战:不要。
你可以做到这一点的任何方式充其量都比仅仅编写你已经编写的内容更耗费资源,而且更有效的方式也不太便携(迫使你编写“Bash 脚本”而不是“shell 脚本”)。
一般来说,无论使用哪种语言,常量表的最佳形式都是文字常量表,而不是在运行时以编程方式生成的东西。如果它足够大以至于硬编码很容易出错,请在编写程序时或在程序的“构建时间”期间以编程方式生成它,并将输出作为文字常量包含在您的实际程序中。
再说一次,不要,但如果你真的必须这样做,一个不需要特殊 shell 特性就可以很好地概括的模式是:
seq
如果您不想依赖该实用程序,可以将其编写为 shell 函数。