次のコードがあります。
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でシェルオプションが設定されている場合、word
KSHスタイル拡張グローバルモードになることができます。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