我长时间尝试在bash中转义反引号(backtick),但是使用\转义失败了。
有没有可能在bash中转义反引号?
示例代码
I="hello.pdf"
var1=`cat <<EOL
![](../images/${I%.*}.png)
\`\`\`sql
some code here
\`\`\`
EOL`
echo "$var1"
所需输出
![](../images/hello.png)
```sql
some code here
```
我长时间尝试在bash中转义反引号(backtick),但是使用\转义失败了。
有没有可能在bash中转义反引号?
I="hello.pdf"
var1=`cat <<EOL
![](../images/${I%.*}.png)
\`\`\`sql
some code here
\`\`\`
EOL`
echo "$var1"
![](../images/hello.png)
```sql
some code here
```
使用$(...)
代替反引号语法进行外部命令替换。因此:
I='foo.png'
var1=$(cat <<EOL
![](../images/${I%.*}.png)
\`\`\`sql
some code here
\`\`\`
EOL
)
echo "$var1"
在https://ideone.com/nbOrIu上查看运行结果和期望输出。
否则,您需要更多反斜杠:
I='foo.png'
var1=`cat <<EOL
![](../images/${I%.*}.png)
\\\`\\\`\\\`sql
some code here
\\\`\\\`\\\`
EOL
`
echo "$var1"
如果你在反引号中嵌套了另一个反引号,那么你需要再次增加反斜杠的数量。说不对反引号进行基于命令的替换。
顺便提一下,你可以考虑一些方法来完全避免这个问题:
I='foo.png'
fence='```'
var1=$(cat <<EOL
![](../images/${I%.*}.png)
${fence}sql
some code here
${fence}
EOL
)
echo "$var1"
$(...)
替代反引号吗? - Robert$(...)
就一直是首选/现代语法;这已经接近30年了!在现代代码中使用反引号进行命令替换是没有任何借口的。 - Charles Duffy