스크립트의 변수와 함께 bash 기록 수정자를 사용할 수 있나요?

스크립트의 변수와 함께 bash 기록 수정자를 사용할 수 있나요?

다음과 같은 스크립트에서 bash 기록 수정자를 사용할 수 있다면 어떨까요?

!$:h파일의 경로를 가져옵니다.

스크립트에서 사용할 수 있는 방법이 있나요? 예를 들어${1:h}

답변1

csh이러한 기록 수정자는 기능이 파생되는 변수 에도 적용될 수 있습니다 .

하지만 bash해당 섹션을 복사하지 않도록 선택하세요. zsh하지만 그것은. 여기에서 다음을 zsh사용할 수 있습니다 bash.

$ file=foo/bar/
$ echo $file:h # (or ${file:h})
foo

zsh(이 예는 실제로 어떤 개선 사항이 csh반환되는지 보여주기 위해 선택되었습니다 foo/bar. 또한 다른 많은 유용한 수정자를 지원합니다.)

다른 쉘에서는 항상 다음을 사용할 수 있습니다 dirname.

$ dir=$(dirname -- "$file")
$ echo "$dir"
foo

(그러나 개행 문자로 끝나는 디렉토리 이름에서는 올바르게 작동하지 않습니다.)

에서는 bash다른 POSIX 셸과 마찬가지로 를 사용할 수 있지만 또는 또는 와 ${file%/*}같은 일부 특수한 경우에는 예상치 못한 결과가 발생할 수 있습니다 .foo/bar/foo/

관련 정보