Bash에서 큰따옴표를 사용하는 것이 혼란스럽습니다.

Bash에서 큰따옴표를 사용하는 것이 혼란스럽습니다.

최근에 나는 내 필요에 맞게 bash 스크립트를 작성하느라 바빴습니다. 그런데 코딩을 하다가 큰따옴표의 사용이 가끔 모순되는 것을 발견했습니다. 예를 들어, 정규식과 일치하는 일부 파일을 찾으려고 합니다. 예를 들어 ls "*.log"습관적으로 *.log큰따옴표로 묶었 지만 오류가 발생합니다 cannot access '*.txt': No such file or directory.

그 후 튜토리얼에서 이유를 찾았습니다. 큰 따옴표 안에 큰 따옴표를 넣는 것은 와일드카드로 동작을 *원할 때 *소용이 없습니다 . 그러므로 ls *.log올바른 사용법입니다.

그러나 grep정규식과 함께 명령을 사용할 때 세 개( "", '', 비따옴표)는 정규식의 원래 의미를 변경하지 않습니다 grep "^s.txt". 예를 들어 이 시점에서 큰따옴표는 정규식을 활성화합니다.

명령 사이에 일부 디자인 충돌이 있습니까? 일반적인 명령에 대한 올바른 따옴표 사용법을 빠르게 배울 수 있는 몇 가지 팁을 알려주실 수 있나요?

답변1

ls *.log껍질 이라면확장된 와일드카드시작하기 전에 ls. 그런 다음 ls주어진결과. 도구 *자체에는 확장된 기능이 없습니다.

grep "^s.txt"쉘이 따옴표만 제거하는 경우 (보통 여전히 유용함을 알 수 있음)껍데기인용된 문자열을 처리하는 방법), grep이를 가져와 ^s.txt해당 작업을 수행합니다. 따옴표가 없으면 ^s.txt쉘은 아무 작업도 수행하지 않으므로 결과는 동일합니다. 그러나 일반적으로 다를 수 있습니다(예 a*.*txt: ).

이것을 비교하십시오:find및 와일드카드(및 와일드카드). 쉘을 와일드카드 find -name로 사용할 수 있습니다 *. 어떤 조치를 취할지는 참조에 따라 다릅니다. 결과는 종종 다르며 때로는 틀리기도 합니다. 쉘을 확장하려는지 알아야 합니다 *.

관련 정보