根据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)
\n\n\nRun Code Online (Sandbox Code Playgroud)\necho $_{0..10}\n
大括号扩展为:
\n\necho $_0 $_1 $_2 $_3 $_4 $_5 $_6 $_7 $_8 $_9 $_10\nRun Code Online (Sandbox Code Playgroud)\n\n_0它打印 11 个名称奇怪的变量(名为、_1、_2等)的值。它们没有设置\xe2\x80\x94这就是为什么你看不到任何东西\xe2\x80\x94但如果它们是,你会:
$ _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\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\n$ echo \'\'$_{0..10}\'x\'\n
同样的事情,但现在每个变量名称后面都有一个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\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n这应该足以理解您问题中的其他示例。
\n\n它还表明链接的答案是重复字符串的糟糕方法。它依赖于未设置的这些变量。不建议。
\n