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

最初の文字列にはカンマが1つしかないので、最後の文字を削除してから_ddd

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

パターンが%bashで始まるので、カンマを一致させようとしていますが、ただあれば終わりひも。 2つの違いを比較します(そして ,元の文字列で後者を置き換えるために使用したものを書き留めます_)。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

関連情報