文字列から最後のX文字を抽出できません。 [閉じる]

文字列から最後のX文字を抽出できません。 [閉じる]

私はMac、bashバージョン5.0.2を使用しています。

受け取る:

    v="ksdjfksjkjsdf"
    v2=${v::-6}

これを得ました:

-bash: -6: substring expression < 0

答え1

Bash 4.2では、負の長さの使用が追加されました。:

${PARAMETER:OFFSET:LENGTH}: 負の LENGTH 値は、文字列の末尾の 4.2 アルファオフセットとして使用されます。

Bashバージョン4.2.53、4.4.12、および5.0.3で動作しているようです。これらのうちの1つについて、私は次のようになります。

$ s=123456; echo "${s::-2}"
1234
$ s=123456; echo "${s::-8}"
bash: -8: substring expression < 0

つまり、負の長さの絶対値が文字列の長さより大きくない限り機能します。

答え2

スクリプトの実行に正しいbashバージョンを使用していますか?あなたのシャーバンラインはこんにちは?スクリプトを呼び出す方法bash myscript.sh?

答え3

これは働きます:

v="aksdjfkajsdkfjakdf"
length=${#v}
v2=${v:0: length - 6}

答え4

私は次の方法でそれをしました

v="ksdjfksjkjsdf"
echo $v| awk -F "" '{gsub("","\n",$0);print $0}'| sed '/^$/d'| sed -n '1,7p'| perl -pne g"/\n//g"

出力

 echo $v| awk -F "" '{gsub("","\n",$0);print $0}'| sed '/^$/d'| sed -n '1,7p'| perl -pne g"/\n//g"

ksdjfks

関連情報