为什么 "$(findmnt | grep "\""proc"\"" | head -n 1)" 的长度为零? (这里用 `"\""` 转义双引号有什么问题?)

为什么 "$(findmnt | grep "\""proc"\"" | head -n 1)" 的长度为零? (这里用 `"\""` 转义双引号有什么问题?)

令我惊讶的是:

$ 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输出仅显示/procforTARGETprocfor SOURCEand FSTYPE(至少在findmnt我见过的所有版本中)。

findmnt -J确实输出"proc",因此会与您的表达式匹配,但话又说回来,使用像jq.

相关内容