내 스크립트에는 다음 줄이 있습니다.
TATVAR=$(echo $PARAMVAR|sed -e 's/^[ \t]*//')
추가 프로그램(sed)을 실행하지 않도록 범위를 좁히고 싶고 shellcheck에서는 다음을 사용해야 한다고 제안합니다.
${variable//search/replace}
정규 표현식을 많이 시도했지만 작동하지 않는 것 같습니다. 이 작업을 수행하는 방법을 아는 사람이 있나요?
답변1
이것을 사용할 수 있지만 "${PARAMVAR//$'\t'/}"
이는 bash 기능이므로 다른 쉘에서는 지원하지 않을 수 있습니다. 이는 스크립트가 #!/bin/bash
( #!/bin/sh
및원하지 않는다)를 사용하여 sh scriptname
실행합니다.
$ PARAMVAR=$'space: tab:\tlinefeed:\nend'
$ echo "$PARAMVAR"
space: tab: linefeed:
end
$ echo "${PARAMVAR//$'\t'/}"
space: tab:linefeed:
end
비교를 위해 [[:blank:]]
다음을 사용하여 공백도 제거됩니다.
$ echo "${PARAMVAR//[[:blank:]]/}"
space:tab:linefeed:
end
그리고 변수 참조는 항상 큰따옴표로 묶어야 합니다. 그렇지 않으면 모든 공백이 토큰으로 처리됩니다( echo
그러면 공백으로 변환됩니다).
$ echo $PARAMVAR
space: tab: linefeed: end
답변2
방금 다음 방법으로 이 문제를 해결했습니다.
TATVAR="${PARAMVAR//[[:blank:]]/}"
누군가가 그것이 올바른지 확인할 수 있다면 기쁠 것입니다.