${!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; do
Not 지정됨 in
. 이는 위치 인수를 반복함을 의미합니다. 아무것도 지정하지 않고 함수를 호출하면 $#은 0이 되고 $1은 string 으로 설정됩니다 PATH
.
${!path}
라는 변수의 내용으로 확장됩니다 $path
. 이는 함수에 대한 인수가 경로가 아니라 인쇄할 경로를 포함하는 변수의 이름임을 의미합니다.
//
대신 바꾸기를 사용하면 /
패턴의 모든 항목이 대체됩니다. 단일 슬래시는 처음 나타나는 슬래시만 대체합니다.