令我惊讶的是:
$ if [ -n "$(findmnt | grep "\""proc"\"" | head -n 1)" ]; then echo 1; else echo 2; fi
2
"\""
读完之后我之前用过IIRChttps://unix.stackexchange.com/a/187452/446998,毕竟它有效:
$ echo "1"\""2"\""3"
1"2"3
为什么在第一种情况下没有?
重访如何在shell中转义引号?并试图遵循接受的答案导致了相反的问题:找到不存在的安装:
$ if [ -n $'$(findmnt | grep "\proc111"\ | head -n 1)' ]; then echo 1; else echo 2; fi
1
它在内部没有 grep 引号的情况下工作:
~$ if [ -n "$(findmnt | grep proc111 | head -n 1)" ]; then echo 1; else echo 2; fi
2
~$ if [ -n "$(findmnt | grep proc | head -n 1)" ]; then echo 1; else echo 2; fi
1
我尝试阅读建议在命令替换中转义双引号但无法立即应用于我的代码。
答案1
问题似乎不是转义双引号不正确,而是"proc"
的输出没有匹配(用双引号括起来)findmnt
。
默认findmnt
输出仅显示/proc
forTARGET
和proc
for SOURCE
and FSTYPE
(至少在findmnt
我见过的所有版本中)。
findmnt -J
确实输出"proc"
,因此会与您的表达式匹配,但话又说回来,使用像jq
.