【发布时间】:2022-01-17 06:32:37
【问题描述】:
如果变量未设置/设置为空字符串,我的 shell 脚本将无法工作。
为此,我使用alpine 图像
docker run -dt alpine
docker exec -it <container> sh
这是有问题的代码:
x=""
sh -c "if [ "$x" != "required" ]; then sed; fi"
当x 未设置时,我得到错误:
sh: required: unknown operand
这似乎只是空字符串的问题。如果我设置x="lkajsdfasl",它就可以正常工作。
这只是分解为空字符串/未设置。
由于我的docker-compose 的设置方式,我只能使用sh 并且必须使用sh -c
【问题讨论】:
-
我怀疑这是一个引用问题 - 如果未设置该变量,第一轮引用会将表达式更改为
if [ != required ]; then sed; fi。您可以将sh -c更改为echo以调查这种可能性。 -
嗯。在这种情况下,它正在打印
if [ redf != required ]; then sed; fi -
别想知道为什么 redf 出现了,它打印的正是你上面的内容
-
如果您在运行时编辑 shell 脚本,就会发生这种情况。否则我不知道。
-
是的,一旦我重新创建了 docker 映像,它似乎已经自行修复了。