相关疑难解决方法(0)

领先的美元符号如何影响Bash中的单引号?

我需要将一个字符串传递给程序作为Bash CLI中的参数,例如

program "don't do this"
Run Code Online (Sandbox Code Playgroud)

该字符串可能包含任何字符,如'$','\'等等,我不希望Bash做任何修改.所以我考虑使用单引号.

但是以下不起作用:

 program 'don\'t do this'            //escape doesn't work in single quote
Run Code Online (Sandbox Code Playgroud)

虽然以下两个工作:

 program $'dont\'t do this'          //seems fine, but any other side effects?
 program 'dont'\''do this'           //breaking into 3 parts
Run Code Online (Sandbox Code Playgroud)

第一种方法似乎更好,因为它获得前修改以下(把美元符号在前面,并替换每\\\),但我不知道还有什么美元符号可能会做.

我真的用谷歌搜索了这个,但我找不到我需要的东西......

bash quotes double-quotes single-quotes

54
推荐指数
2
解决办法
2万
查看次数

如何使用单个命令在Dockerfile中输出多行字符串

我想在Dockerfile中输出以下文本:

  *****first row *****  
  *****second row *****    
Run Code Online (Sandbox Code Playgroud)

一种方法是这样做:

cat > Dockerfile <<EOF
FROM alpine:latest
RUN echo '  *****first row *****  ' >> /home/myfile
RUN echo '  *****second row *****  ' >> /home/myfile
ENTRYPOINT cat /home/myfile; sh;
WORKDIR /home
EOF  
Run Code Online (Sandbox Code Playgroud)

但是,如果我有100行,则需要花费时间,因为它分别运行每个命令并将其作为一层。

其他方式是这样的:

FROM alpine:latest
RUN printf '  *****first row *****  \n  *****second row *****  \n' >> /home/myfile
ENTRYPOINT cat /home/myfile; sh;
WORKDIR /home
Run Code Online (Sandbox Code Playgroud)

但我不喜欢它,因为它使可读性降低,尤其是当您有100行时。

我不知道有没有办法做这样的事情:

FROM alpine:latest
RUN echo '  *****first row *****  
            *****second row *****  ' >> /home/myfile
ENTRYPOINT cat …
Run Code Online (Sandbox Code Playgroud)

string bash multiline docker dockerfile

2
推荐指数
2
解决办法
4991
查看次数