%22%20%EA%B8%B8%EC%9D%B4%EA%B0%80%200%EC%9D%B8%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20(%EC%97%AC%EA%B8%B0%EC%84%9C%20%ED%81%B0%EB%94%B0%EC%98%B4%ED%91%9C%EB%A5%BC%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%20%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%60%22%5C%22%22%60%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%A9%B4%20%EC%96%B4%EB%96%A4%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EC%9E%88%EB%82%98%EC%9A%94%3F).png)
제가 놀란 점은 다음과 같습니다.
$ 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
.