Bash에서 변수의 마지막 문자를 제거하십시오.

Bash에서 변수의 마지막 문자를 제거하십시오.

다음 코드가 있습니다.

testval="aaa_bbb_ccc," 
testval+="_ddd"
echo ${testval}

하지만 "뒤에 쉼표"를 제거해야 합니다.ccc${testval}". 추가하기 전에는 항상 마지막 문자였습니다._ddd". 문자열에 추가 쉼표를 유지해야 할 수도 있습니다.

그러나 지금까지 나는 작동하는 것을 찾을 수 없습니다.

예를 들어

testval="aaa_bbb_ccc," ; 
testval=${testval} | rev | cut -c 2- | rev ; testval+="_ddd" ; 
echo ${testval}

또는

testval="aaa_bbb_ccc," ; 
testval=${testval} | sed 's/.$//' ; testval+="_ddd" ; 
echo ${testval}

둘 다 다음으로 이어질 수 있습니다.

aaa_bbb_ccc,_ddd

나는 또한 다음을 시도했습니다.

testval="aaa_bbb_ccc," ; 
testval=$(${testval} | rev | cut -c 2- | rev) ; 
testval+="_ddd" ; 
echo ${testval}`

그리고

testval="aaa_bbb_ccc," ; 
testval=$(${testval} | sed 's/.$//') ; 
testval+="_ddd" ; 
echo ${testval}

둘 다 다음으로 이어질 수 있습니다.

-su: {testval}: command not found**

rtrim동등하거나 유사한 기능 은 없나요 ? 이것은 마지막 것을 다듬습니다.N문자열/변수의 문자

답변1

비슷한 기능에 상응하는 기능이나 rtrim이 없나요? 문자열/변수에서 마지막 n 문자를 제거하십시오.

바로 여기에:

   ${parameter%word}
   ${parameter%%word}
          Remove matching suffix pattern.

%양식은 가장 짧은 일치 항목을 제거하고 %%가장 긴 일치 항목을 제거합니다. 해당 "ltrim"은 ${parameter#word}및 입니다 ${parameter##word}.

예를 들어

$ testval="aaa_bbb_ccc,"
$ testval=${testval%,}
$ echo ${testval}
aaa_bbb_ccc

귀하의 경우

$ testval="aaa_bbb_ccc,"
$ testval=${testval%,}
$ testval+="_ddd"
$ echo ${testval}
aaa_bbb_ccc_ddd

,이를 변경 하여 ?단일 문자를 제거하거나 ???n=3개의 후행 문자 등을 바꿀 수 있습니다 . Bash에서 쉘 옵션이 설정된 경우 wordKSH 스타일 확장 글로벌 모드가 될 수 있습니다.extglob

답변2

초기 문자열에는 쉼표가 하나만 있으므로 마지막 문자를 제거한 다음 _ddd.

$ testval="aaa_bbb_ccc," 
$ testval="${testval/%,/_ddd}"
$ echo $testval
aaa_bbb_ccc_ddd

패턴이 %bash로 시작하기 때문에 쉼표를 일치시키려고 하지만,오직위치해 있다면끈. 둘 사이의 차이점을 비교합니다(그리고 ,원래 문자열에서 후자를 대체하는 데 사용한 내용을 기록해 둡니다 _).aaa

$ testval="aaa,bbb_ccc,"
$ testval="${testval/%,/_ddd}"
$ echo $testval
aaa,bbb_ccc_ddd

그리고 이것은 아닙니다 %.

$ testval="aaa_,bbb_ccc,"
$ testval="${testval/,/_ddd}"
$ echo $testval
aaa__dddbbb_ccc,

답변3

답변은 이미 귀하의 질문에 있습니다. echo${testval}` 앞에 추가하기 만 하면 됩니다.

testval="aaa_bbb_ccc," ; testval=$(echo ${testval} | sed 's/.$//') ; testval+="_ddd" ; echo ${testval}
aaa_bbb_ccc_ddd

답변4

당신은 그것을 사용할 수 있습니다 awk:

testval="aaa_bbb_ccc,"
testval=$(echo $testval| awk '{sub(/.$/,"",$0);print $0"_ddd"}')

결과 출력:

aaa_bbb_ccc_ddd

관련 정보