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
'development' 카테고리의 다른 글
API에서 iPhone IDFA를 검색하는 방법은 무엇입니까? (0) | 2020.11.19 |
---|---|
Mongo = 단일 문서의 크기 가져 오기 (0) | 2020.11.19 |
부트 스트랩 모달 대화 상자의 Google지도 자동 완성 결과 (0) | 2020.11.19 |
Android에서 Intent를 사용하여 활동 내에서 Android Bitmap 데이터 전달 (0) | 2020.11.19 |
정의되지 않은 함수 mysql_connect () (0) | 2020.11.19 |