제가 놀란 점은 다음과 같습니다.
$ if [ -n "$(findmnt | grep "\""proc"\"" | head -n 1)" ]; then echo 1; else echo 2; fi
2
"\""
이 글을 읽은 후 IIRC 이전에 사용했습니다https://unix.stackexchange.com/a/187452/446998, 결국 작동합니다.
$ echo "1"\""2"\""3"
1"2"3
첫 번째 경우에는 왜 안되나요?
다시 방문하다쉘에서 따옴표를 이스케이프 처리하는 방법은 무엇입니까?그리고 허용된 답변을 따르려고 하면 반대의 문제가 발생했습니다. 존재하지 않는 설치를 찾는 것입니다.
$ 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
.
기본 출력은 for 및 for and (적어도 내가 본 모든 버전에서는) findmnt
만 표시됩니다 ./proc
TARGET
proc
SOURCE
FSTYPE
findmnt
findmnt -J
출력하므로 "proc"
표현식과 일치하지만 다시 jq
.