`${!path//:/$'\n'}` $PATH를 표시하고 디렉토리를 줄바꿈으로 구분하기 위해 매개변수 확장을 수행하는 방법은 무엇입니까?

`${!path//:/$'\n'}` $PATH를 표시하고 디렉토리를 줄바꿈으로 구분하기 위해 매개변수 확장을 수행하는 방법은 무엇입니까?

${!path//:/$'\n'}다음 쉘 기능이 어떻게 작동하는지 이해할 수 없습니다 .

with 대신에 man bash사용하는 것을 살펴보고 고려했지만 , 이 경우 확장자 는 ? 또한 슬래시를 하나 대신 두 개 사용하는 이유는 무엇입니까?${parameter/pattern/string}:\n${!path//

pathprint () {
   if (($# == 0)); then
      set -- PATH
   fi
   for path; do
      echo "$path"
      echo "${!path//:/$'\n'}"
   done
}

마지막으로, 아래의 "단순화"가 작동하지 않는 이유는 무엇입니까?

pathprint () {
      echo "PATH"
      echo "${!PATH//:/$'\n'}"
   done
}

이런 경우에는 매개변수 확장 이전에 확장하고 현재 값의 이름을 가진 매개변수가 $PATH없다고 불평합니다 ?.bash$PATH

답변1

for path; doNot 지정됨 in. 이는 위치 인수를 반복함을 의미합니다. 아무것도 지정하지 않고 함수를 호출하면 $#은 0이 되고 $1은 string 으로 설정됩니다 PATH.

${!path}라는 변수의 내용으로 확장됩니다 $path. 이는 함수에 대한 인수가 경로가 아니라 인쇄할 경로를 포함하는 변수의 이름임을 의미합니다.

//대신 바꾸기를 사용하면 /패턴의 모든 항목이 대체됩니다. 단일 슬래시는 처음 나타나는 슬래시만 대체합니다.

관련 정보