Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux set-e覆盖bash脚本中的参数变量($@)_Linux_Bash - Fatal编程技术网

Linux set-e覆盖bash脚本中的参数变量($@)

Linux set-e覆盖bash脚本中的参数变量($@),linux,bash,Linux,Bash,我有一个脚本test.sh #/!bin/bash set -e trap errorhandler ERR errorhandler(){ status=$? trap - ERR exit $status } echo "$@" exit 0 当我调用sh test.sh'Hey'时,它将打印-e,而不是Hey 我的工作方法是使用反勾号环绕set-e,但不知道它是否仍能按预期工作 另一种解决方法是将其存储在第一行的变量中,但我希望我的设置-e位于第一行,原因很

我有一个脚本test.sh

#/!bin/bash
set -e
trap errorhandler ERR

errorhandler(){
    status=$?
    trap - ERR
    exit $status
}

echo "$@"

exit 0
当我调用
sh test.sh'Hey'
时,它将打印
-e
,而不是
Hey
我的工作方法是使用反勾号环绕
set-e
,但不知道它是否仍能按预期工作 另一种解决方法是将其存储在第一行的变量中,但我希望我的
设置-e
位于第一行,原因很明显(处理错误)。
有没有一个聪明的方法可以做到这一点?比如“嘿,别碰我的$@”命令。

明白了
-e
-e
注意破折号。第一个是正确的。
吸取的教训。不要直接从html复制代码。

明白了
-e
-e
注意破折号。第一个是正确的。
吸取的教训。不要直接从html复制代码。

运行
bash test.sh'Hey'
而不是
sh test.sh'Hey'
。这对我有效。试过了,对我无效,但谢谢。奇怪的是,我在sh和bash上都试过你的代码,在Mac上效果很好。在Linux上,它与bash一起工作,但与sh不同,在这里我得到了
trap:ERR:bad trap
。我在两者上都使用bash4。你用的是什么版本?还有一件可能很小的事情:你的shebang应该是
#/bin/bash
(注意初始斜杠)。可能不会影响你所看到的,但仅供参考。@RayToal
\bin/bash
不是答案,但这是正确的方法。我编辑了这个问题。检查我的答案。谢谢你的帮助,谢谢!运行
bash test.sh'Hey'
而不是
sh test.sh'Hey'
。这对我有效。试过了,对我无效,但谢谢。奇怪的是,我在sh和bash上都试过你的代码,在Mac上效果很好。在Linux上,它与bash一起工作,但与sh不同,在这里我得到了
trap:ERR:bad trap
。我在两者上都使用bash4。你用的是什么版本?还有一件可能很小的事情:你的shebang应该是
#/bin/bash
(注意初始斜杠)。可能不会影响你所看到的,但仅供参考。@RayToal
\bin/bash
不是答案,但这是正确的方法。我编辑了这个问题。检查我的答案。谢谢你的帮助,谢谢!哦,左边的比右边的短4个像素?你是怎么让那个字符出现的?谢谢。我从一个网站复制了set–e,并将其粘贴到vim。一个完美的例子是我名字前面的破折号哦,左边的比右边的短4个像素?你是怎么让那个字符出现的?谢谢。我从一个网站复制了set–e,并将其粘贴到vim。一个完美的例子是我名字前面的破折号