在中,手册说
以下是期望的行为:
使用
如何在使用DEBUG陷阱时保留$_的值?
$_
应该是“上一个执行的命令的最后一个参数”。以下是期望的行为:
$ echo 1 2 3
1 2 3
$ echo $_
3
$
使用
DEBUG
陷阱时,$_
基于陷阱运行的最后一条命令(以下示例中为date
),而不是用户输入的最后一条命令:$ exec bash
$ unset PROMPT_COMMAND
$ trap date DEBUG
$ echo 1 2 3
Sat Dec 3 11:54:33 ICT 2016
1 2 3
$ echo $_
Sat Dec 3 11:54:37 ICT 2016
date
$ # User blinks in confusion and says "but I didn't just type date!"
默认情况下,设置DEBUG
陷阱会更改$_
的默认行为。
无论是chruby还是bash-preexec都受此影响。
有趣的是,在zsh
中,这一点可以正常工作:
$ zsh
genesis% trap date DEBUG
genesis% echo 1 2 3
Sat Dec 3 12:18:01 ICT 2016
1 2 3
genesis% echo $_
Sat Dec 3 12:18:04 ICT 2016
3
genesis%
如何在使用DEBUG陷阱时保留$_的值?
$1
? - Tom Halea='hello world *.txt'; b=$a
,此时b
的值就是a
的值,没有任何问题。 - Andreas Louvlocal old_="$1";
(明确一点,这完全是一个风格上的问题,没有实际影响)。 - undefinedlocal
声明中分离出来,现在更少了歧义。 - undefined