我需要将一个字符串传递给程序作为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)
第一种方法似乎更好,因为它获得前修改以下(把美元符号在前面,并替换每\到\\),但我不知道还有什么美元符号可能会做.
我真的用谷歌搜索了这个,但我找不到我需要的东西......
我想在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)