根据tldp.org,bash下划线变量为:
underscore变量是在shell启动时设置的,包含在参数列表中传递的正在执行的shell或脚本的绝对文件名。随后,在扩展后,它扩展为上一个命令的最后一个参数。它还设置为执行的每个命令的完整路径名,并放置在导出到该命令的环境中。检查邮件时,此参数保存邮件文件的名称。
但是这个答案,我怎么能重复Bash的一个人物?奇怪地使用了它:
# exactly the same as perl -E 'say "=" x 100'.
echo -e ''$_{1..100}'\b='
试着使用这个变量,我不能从其语义上做任何事情,所以问题是
$_
。意味着什么?
样品:
$ echo $_{0..10} ; echo $_{0..10} | wc
1 0 1
$ echo ''$_{0..10}'' ; echo ''$_{0..10}'' | wc
1 0 11
$ echo ''$_{0..10}'x' ; echo ''$_{0..10}'x' | wc
x x x x x x x x x x x
1 11 22
$ echo 'x'$_{0..10}'' ; echo 'x'$_{0..10}'' | wc
x x x x x x x x x x x
1 11 22
$ echo 'ab'$_{0..10}'cd' ; echo 'ab'$_{0..10}'cd' | wc
abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd
1 11 55
echo $_{0..10}
括号被扩展为:
echo $_0 $_1 $_2 $_3 $_4 $_5 $_6 $_7 $_8 $_9 $_10
它打印11名为奇怪的命名变量的值_0
,_1
,_2
,等等。他们没有设置-这就是为什么您什么都看不到的原因-但是如果设置了,您将:
$ _0=zero _1=one _2=two _3=three _4=four _5=five _6=six _7=seven _8=eight _9=nine _10=ten
$ echo $_{0..10}
zero one two three four five six seven eight nine ten
$ echo ''$_{0..10}'x'
同样,但是x
每个变量名后面都有一个。它不是变量名称的一部分。这是一个单独的文字字符x
,就像您写的一样:
echo ${_0}x ${_1}x ${_2}x ${_3}x ${_4}x ${_5}x ${_6}x ${_7}x ${_8}x ${_9}x ${_10}x
现在,当变量具有值时,输出为:
$ _0=zero _1=one _2=two _3=three _4=four _5=five _6=six _7=seven _8=eight _9=nine _10=ten
$ echo ''$_{0..10}'x'
zerox onex twox threex fourx fivex sixx sevenx eightx ninex tenx
这应该足以理解您问题中的其他示例。
它还表明,链接的答案是重复字符串的不良方法。它依赖于未设置的这些变量。不建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句