【问题标题】:Shell script unknown operand alpineShell 脚本未知操作数 alpine
【发布时间】: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 映像,它似乎已经自行修复了。

标签: docker sh


【解决方案1】:

这是一个引用问题。像这样在命令周围使用单引号

sh -c 'if [ "$x" != "required" ]; then sed; fi'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 2022-01-07
    • 2016-12-04
    • 2011-06-18
    • 2012-08-07
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多