在此Dockerfile入口点中,“ set-”有什么作用?


41

我想了解这个Docker入口点的作用

在我看来,这是编写Dockerfile时非常常见的模式,但是我的bash技能有限,我不知道所有特殊的bash符号功夫。

另外,很难用Google搜索“-”,“ $!”。等等。在bash世界中这些叫做什么?

总而言之,波纹管试图做什么?

if [ "${1#-}" != "$1" ]; then
  set -- haproxy "$@"
fi

Answers:


55

set命令(未设置选项时)设置位置参数,例如

$ set a b c
$ echo $1
a
$ echo $2
b
$ echo $3
c

--是标准的“请勿将此选项作为选项”

这些"$@"都是现有的职位参数。

所以顺序

set -- haproxy "$@"

将把单词haproxy放在$1 $2等前面。

例如

$ echo $1,$2,$3
a,b,c
$ set -- haproxy "$@"
$ echo $1,$2,$3,$4   
haproxy,a,b,c

我没有看到使用“-”有什么区别。在这里尝试并获得了相同的结果。我希望您能改善答案以突出区别。
卢卡斯·波特斯基

8
比较set -- -z 2 3 4set -z 2 3 4。该--停止-a解释为一个选项之中。在这种情况下,这不是必需的,但是--当您确定要遵循的内容时,养成使用习惯是“好的做法” :-)
Stephen Harris

1
另一个主要区别是,如果要在另一个脚本中提供脚本,则使用set -- $arg1 $arg2将允许源脚本读取参数,否则,只有Bash支持将参数直接传递到源脚本(​​这很棘手)。
dragon788 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.