下划线变量然后在bash中表示范围是什么:$ _ {0..10}

问题描述 投票:2回答:3

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

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

但是对[[如何在Bash中重复一个字符?的this答案却奇怪地使用了它:

# 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

  • bash
    3个回答
    0
    投票
    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
    

    这应该足以理解您问题中的其他示例。
    它还显示linked answer是重复字符串的不良方法。它依赖于未设置的这些变量。不推荐。

    0
    投票
    $ echo -e $_{1..3}'\b=' | od -t x1 0000000 08 3d 20 08 3d 20 08 3d 0a 0000011

    在它们之间插入backspace character以隐藏空格。


    -1
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.