下划线变量后跟范围在 bash 中意味着什么:$_{0..10}

hko*_*sha 3 bash

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

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


但是这个答案是如何在 Bash 中重复一个字符?它的用法很奇怪:

# exactly the same as perl -E 'say "=" x 100'.
echo -e ''$_{1..100}'\b='
Run Code Online (Sandbox Code Playgroud)

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

  • 一根绳子。
  • 其次是$_
  • 其次是范围的扩大。
  • 后面跟着另一个字符串

bash 中的意思?

样本:

# exactly the same as perl -E 'say "=" x 100'.
echo -e ''$_{1..100}'\b='
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 7

\n
echo $_{0..10}\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

大括号扩展为:

\n\n
echo $_0 $_1 $_2 $_3 $_4 $_5 $_6 $_7 $_8 $_9 $_10\n
Run Code Online (Sandbox Code Playgroud)\n\n

_0它打印 11 个名称奇怪的变量(名为、_1_2等)的值。它们没有设置\xe2\x80\x94这就是为什么你看不到任何东西\xe2\x80\x94但如果它们是,你会:

\n\n
$ _0=zero _1=one _2=two _3=three _4=four _5=five _6=six _7=seven _8=eight _9=nine _10=ten\n$ echo $_{0..10}\nzero one two three four five six seven eight nine ten\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
\n
$ echo \'\'$_{0..10}\'x\'\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

同样的事情,但现在每个变量名称后面都有一个x。它不是变量名称的一部分。它是一个单独的文字字符x,就像您写的一样:

\n\n
echo ${_0}x ${_1}x ${_2}x ${_3}x ${_4}x ${_5}x ${_6}x ${_7}x ${_8}x ${_9}x ${_10}x\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在变量有值时的输出是:

\n\n
$ _0=zero _1=one _2=two _3=three _4=four _5=five _6=six _7=seven _8=eight _9=nine _10=ten\n$ echo \'\'$_{0..10}\'x\'\nzerox onex twox threex fourx fivex sixx sevenx eightx ninex tenx\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

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

\n\n

它还表明链接的答案是重复字符串的糟糕方法。它依赖于未设置的这些变量。不建议。

\n