如何在`$ @`bash变量中包含`-e`参数?

hoo*_*tor 6 bash echo

我正在创建一个bash脚本,它将包装一个docker run命令,传入所有参数.正在运行的docker cmd有一个如下-e参数:

docker run --rm -it --name some_name -v $(pwd):/some_dir some_image some_command -e -r -t
Run Code Online (Sandbox Code Playgroud)

但是,bash脚本由于某种原因未传入-e参数.

例如,我有以下test.sh脚本.

#!/bin/bash
echo "Echoing the command arguments."
echo $@
Run Code Online (Sandbox Code Playgroud)

-e参数不通过传递到$@时在第一位置.

$ ./test.sh -e -r -t
Echoing the command arguments.
-r -t

$ ./test.sh -r -e -t
Echoing the command arguments.
-r -e -t
Run Code Online (Sandbox Code Playgroud)

最后,我希望能够按如下方式调用docker命令,只需将所有给定参数从bash脚本传递到docker命令即可.

docker run --rm -it --name some_name -v $(pwd):/some_dir some_image some_command $@
Run Code Online (Sandbox Code Playgroud)

如果用户期望-e传入参数并且未发生关联活动,则这可能会使用户感到困惑.

有没有办法让-e参数通过?

Cha*_*ffy 8

将您的测试更改为:

#!/bin/bash
echo "Echoing the command arguments:"
printf ' - %q\n' "$@"
Run Code Online (Sandbox Code Playgroud)

......你会看到-e礼物.

当字符串作为其第一个参数时,符合POSIX的实现echo-e在输出上打印.除非设置了两个set -o posixshopt -s xpg_echo运行时选项,否则bash的实现不符合要求.