在bash:$_{0.10}中,下划线变量后面跟着范围意味着什么



根据tldp.org,bash下划线变量为:

下划线变量在shell启动时设置,并包含参数列表中传递的shell或正在执行的脚本的绝对文件名。随后,它在展开后展开到上一个命令的最后一个参数。它还被设置为执行并放置在导出到该命令的环境中的每个命令的完整路径名。检查邮件时,此参数保存邮件文件的名称。


但是我如何在Bash中重复一个字符奇怪地利用了它:

# exactly the same as perl -E 'say "=" x 100'.
echo -e ''$_{1..100}'b='

摆弄这个变量,我无法从它的语义中得到任何东西,所以问题是是什么

  • 一个字符串
  • 其次是CCD_ 1
  • 随后是范围扩展
  • 后面跟着另一个字符串

bash中的平均值?

样品:

$ 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

这应该足以理解您问题中的其他示例。

它还表明,链接答案是一种糟糕的重复字符串的方式。它依赖于未设置的这些变量。不推荐。

这是大括号扩展。

读取

info bash -n "Brace Expansion"

这将使用给定的数字扩展存储在$_中的最后一个命令。

最新更新