앰퍼샌드가 포함 된 하위 디렉토리 이름을 어떻게 이스케이프합니까? 디렉토리 트리를 탐색하려고합니다. 다음과

kornshell을 실행하고 디렉토리 트리를 탐색하려고합니다. 다음과 같은 이름의 서브 디렉토리로 cd하십시오.

 -3ab_&_-3dc.img

내 질문은 어떻게이 이름으로 앰퍼샌드를 피해야합니까? 나는 큰 따옴표와 백 슬래시의 다른 조합을 성공적으로 시도했습니다.



답변

를 들어 &(또는 거의 모든 다른 문자, 당신은 두 가지 간단한 가능성이있다.

  • 전체를 작은 따옴표로 묶습니다. ' -3ab_&_-3dc.img'
  • 번거로운 각 문자 앞에 백 슬래시를 넣으십시오. -3ab_\&_-3dc.img

두 가지 예외가 있습니다.

  • 작은 따옴표에는 작은 따옴표 방법이 작동하지 않습니다. 백 슬래시는 작은 따옴표 안에 특별하지 않으므로 직접 사용할 수도 없습니다. 할 수있는 일은 작은 따옴표로 묶인 문자열을 끝내고 즉시 백 슬래시와 작은 따옴표를 사용하고 작은 따옴표를 다시 시작하는 것입니다. 그래서 예를 들어, 디렉토리의 이름은 경우입니다 foo'bar\qux: cd 'foo'\''bar\qux'. 그런 식으로 기억할 수 있습니다. 작은 따옴표 안에 작은 따옴표를 '\''가져 옵니다 .
  • 백 슬래시 방법은 개행에는 작동하지 않습니다. 백 슬래시-개행은 무시됩니다. 줄 바꿈을 작은 따옴표로 묶어야합니다.

큰 따옴표도 사용할 수 있지만 일부 문자 앞에 백 슬래시를 넣어야합니다. 작은 따옴표가 더 간단합니다.

여기에는 디렉토리 이름이 대시로 시작한다는 점에서 또 다른 어려움이 있습니다. 이 문자는 cd거의 모든 명령과 마찬가지로 명령이 옵션에 따른다 는 것을 알려줍니다 . 대시는 쉘에만 국한되지 않고 명령에만 국한되므로 따옴표는 영향을 미치지 않습니다. 옵션으로 해석하지 않고 명령으로 대시로 시작하는 인수를 전달하는 두 가지 방법이 있습니다.

  • 이 주장을 표현할 다른 방법을 찾으십시오. 파일 이름의 경우 ./앞에 추가하면 여전히 동일한 파일이 지정됩니다.
  • 논쟁을 --먼저하십시오. 옵션을 찾지 말라고 명령합니다.

다음은이 서브 디렉토리로 변경할 수있는 몇 가지 방법입니다.

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'

답변

앰퍼샌드를 이스케이프해야하지만 앰퍼샌드가 -아니라 앞선 문제가있을 수 있습니다 . 선행 -만든 CD는 옵션에 전달하는 것이라고 생각합니다. 다음을 사용하여이 문제를 해결할 수 있습니다 ./.

cd './-3ab_&_-3dc.img'