development

bash 오류의 문자열에서 처음 5자를 검색하려고합니까?

big-blog 2020. 11. 19. 21:44
반응형

bash 오류의 문자열에서 처음 5자를 검색하려고합니까?


문자열에서 처음 5 개 문자를 검색하려고하는데 Bad substitution문자열 조작 줄에 대한 오류가 계속 발생합니다. teststring.sh스크립트에 다음 줄이 있습니다.

TESTSTRINGONE="MOTEST"

NEWTESTSTRING=${TESTSTRINGONE:0:5}
echo ${NEWTESTSTRING}

나는 구문을 여러 번 검토했고 내가 뭘 잘못하고 있는지 볼 수 없다.

감사


셸에 따라 다음 구문을 사용할 수 있습니다.

expr substr $string $position $length

따라서 귀하의 예를 들어 :

TESTSTRINGONE="MOTEST"
echo `expr substr ${TESTSTRINGONE} 0 5`

또는

echo 'MOTEST' | cut -c1-5

또는

echo 'MOTEST' | awk '{print substr($0,0,5)}'

echo 'mystring' |cut -c1-5 UR 문제에 대한 대안 솔루션입니다.

유닉스 컷 프로그램 에 대한 추가 정보


여기에서 작동 :

$ TESTSTRINGONE="MOTEST"
$ NEWTESTSTRING=${TESTSTRINGONE:0:5}
$ echo ${NEWTESTSTRING}
MOTES

어떤 쉘을 사용하고 있습니까?


이것은 당신을 위해 일할 수 있습니다.

 printf "%.5s" $TESTSTRINGONE

하위 문자열 ${variablename:0:5}은 기본 셸에서 사용할 수없는 bash 기능입니다. 이것을 bash에서 실행하고 있습니까? shebang 줄 (스크립트 시작 부분)을 확인하고 #!/bin/bash, 아닌지 확인합니다 #!/bin/sh.


대부분의 쉘에서 작동

TESTSTRINGONE="MOTEST"
NEWTESTSTRING=${TESTSTRINGONE%"${TESTSTRINGONE#?????}"}
echo ${NEWTESTSTRING}
# MOTES

원하는 sed경우 시도해 볼 수 있습니다.

[jaypal:~/Temp] TESTSTRINGONE="MOTEST"
[jaypal:~/Temp] sed 's/\(.\{5\}\).*/\1/' <<< "$TESTSTRINGONE"
MOTES

해당 매개 변수 확장이 작동해야합니다 (어떤 버전의 bash가 있습니까?).

다음은 또 다른 접근 방식입니다.

read -n 5 NEWTESTSTRING <<< "$TESTSTRINGONE"

echo $TESTSTRINGONE|awk '{print substr($0,0,5)}'

원래 구문은 BASH에서는 작동하지만 DASH에서는 작동하지 않습니다. 데비안 시스템에서는 bash를 사용한다고 생각할 수 있지만 대신 대시를 사용할 수 있습니다. / bin / dash / 존재하는 경우 일시적으로 대시 이름을 no.dash와 같은 이름으로 변경 한 다음 소프트 링크 (일명 ln -s / bin / bash / bin / dash)를 만들고 문제가 해결되는지 확인합니다.


당신은 너무 가까웠습니다! 가장 쉬운 해결책은 다음과 같습니다.NEWTESTSTRING=$(echo ${TESTSTRINGONE::5})

따라서 귀하의 예를 들어 :

$ TESTSTRINGONE="MOTEST"
$ NEWTESTSTRING=$(echo ${TESTSTRINGONE::5})
$ echo $NEWTESTSTRING
MOTES

참고 URL : https://stackoverflow.com/questions/8928224/trying-to-retrieve-first-5-characters-from-string-in-bash-error

반응형