foo bar
(touch foo\ bar
명령 사용)이라는 파일을 만들었습니다. find
는 bar"
라는 이름의 파일을 다음 "foo
라는 이름의 파일을 찾고, 첫 번째로변수 매개 변수를 전달할 때 find의 이상한 동작
s='"foo bar"'; find $s
s='"foo bar"'; find "$s"
s="foo bar"; find "$s"
:
그런 다음 배쉬에서 나는 다음과 같은 명령을 시도했다.find
은 "foo bar"
이라는 파일을 찾습니다.
두 명령이 모두 실패합니다. find
은 파일을 찾지 못합니다.
마지막으로 세 번째 명령의 예상 동작은 다음과 같습니다. find
은 foo bar
을 찾아 보여줍니다.
공백 문자를 벗어나지 않는 것이 좋지만 다른 사람이 나에게 무슨 일이 일어나는지 설명 할 수 있습니까? 두 번째 명령이 작동하지 않는 이유는 무엇입니까?
그래서 (I 변수없이 전체 명령을 입력하는 것처럼) 따옴표 변수 매개 변수를 전달하는 유일한 방법은 다음과 같습니다
참고
find X Y
의 동작은X
및Y
을 찾는 것입니다 변수를 "$ s"로 둘러 쌉니다. 그렇지 않으면 일반 문자가됩니다. 맞습니까? – Mizar음, 무슨 뜻인지 알 수 없습니다. 확실한 것은 조심해야합니다. 따옴표를 쓰지 않는 것입니다 :) 당신이 찾고있는 이름은''foo bar''가 아니라''foo bar''입니다. 즉,'foo bar'를 찾고 있다면 그냥'var = "foo bar"변수를 할당하면 따옴표로 변수가'foo bar'라는 것을 알 수 있습니다. 그런 다음, 큰 따옴표로'find'를 사용하여 변수가 전체적이고 유일한 문자열로 해석되는지 확인하십시오 :'find "$ var"'. – fedorqui
좋습니다, 감사합니다. 내가 말한 의미는 (만약 내가 이해했다면) 배쉬가 변수를 확장 할 때, 변수에 포함 된 따옴표를 일반 문자로 취급하고 더 이상 단어를 그룹화하라는 기호로 취급하지 않는다는 것입니다. – Mizar