./
의 처음부터 삭제하고 싶습니다 ./Accounts
.
이것은 내 스크립트입니다.
export Item=./Accounts
echo $Item
export ReplacedItem=${$Item/.\//}
echo $ReplacedItem
하지만 나는 다음을 얻습니다.
main.sh: 3행: 교체된항목=${$Item/.//}: 잘못된 교체
내가 뭘 잘못했나요?
답변1
표준 연산자 1이 사용되며 여기에는 ksh93 스타일 연산자가 sh
${param#pattern}
필요 하지 않습니다.${param/pattern/replacement}
${$param/pattern/replacement}
게다가 다른 명령이 이를 상속하도록 원하지 않는 한 이러한 변수를 내보낼 필요가 없습니다. 또한 echo
임의의 데이터를 인쇄하는 데 사용할 수 없으며 매개변수 확장이 에 있어야 한다는 점을 기억하세요 bash
.
Item=./Accounts
printf '%s\n' "$Item"
ReplacedItem="${Item#./}"
printf '%s\n' "$Item"
ksh93 스타일을 사용하는 경우 ${param/pattern/replacement}
다음과 같아야 합니다.
ReplacedItem="${Item/.\//}"
/
대체 항목이 빈 문자열인 경우 패턴과 대체 항목 이전 항목을 생략할 수 있습니다.
ReplacedItem="${Item/.\/}"
그러나 시작 부분이 아니더라도 ./
in 의 첫 번째 항목을 제거한다는 점에 유의하십시오 . $Item
처음에만 제거하려면 #
패턴 시작 부분에 추가하면 됩니다.
ReplacedItem="${Item/#.\/}"
(그러나 다시 말하지만, 표준에 비해 이점이 없습니다 ${Item#./}
).
원래 ksh85에 이미 존재하고 sh
90년대 초반 POSIX에 의해 지정된 ksh에서 유래되었으므로 sh
.bash
sh
² 최소한 목록 컨텍스트에 있는 항목입니다. var=$param
( 가스칼라대신 변수목록/대량으로변수) 및 기타 비목록 컨텍스트도 있지만 문제가 되지는 않습니다.