Экранирование символа является «проблемой» в том смысле, что в данном примере это не нужно.
Попробуйте этот Dockerfile и посмотрите объяснение в аналогичном вопросе: Экземпляры Bash не вложены в Dockerfile`RUN`
FROM debian:10
RUN ["bash", "-exc", "bash -exc 'echo SHLVL: $SHLVL'"]
RUN ["bash", "-exc", ":; bash -exc ':; echo SHLVL: $SHLVL'"]
Так почему экранирование здесь не нужно: в первом варианте внешний bash выполняет команду:
bash -exc 'echo SHLVL: $SHLVL'
из-за использования одинарных кавычек, не нужно убегать. Следуйте расширению переменных с помощью параметра x
для bash и проверьте вывод сборки Dockerfile:
Sending build context to Docker daemon 14.85kB
Step 1/3 : FROM debian:10
---> 8e9f8546050d
Step 2/3 : RUN ["bash", "-exc", "bash -exc 'echo SHLVL: $SHLVL'"]
---> Running in 07aaddefac26
+ bash -exc 'echo SHLVL: $SHLVL'
SHLVL: 1
+ echo SHLVL: 1
Removing intermediate container 07aaddefac26
---> e82b3fc4b569
Step 3/3 : RUN ["bash", "-exc", ":; bash -exc ':; echo SHLVL: $SHLVL'"]
---> Running in 1257c43b276d
+ :
+ bash -exc ':; echo SHLVL: $SHLVL'
+ :
+ echo SHLVL: 2
SHLVL: 2
Removing intermediate container 1257c43b276d
---> cfa749c16631
Successfully built cfa749c16631
Successfully tagged test:latest