탭 문자를 제거하기 위한 Bash 매개변수 확장

탭 문자를 제거하기 위한 Bash 매개변수 확장

내 스크립트에는 다음 줄이 있습니다.

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:]]/}"

누군가가 그것이 올바른지 확인할 수 있다면 기쁠 것입니다.

관련 정보