シェルスクリプトのサブストリング

シェルスクリプトのサブストリング

文字列から部分文字列を取得しようとしてエラーが発生します。${curr_rec:3:4}: bad substitution

#!/bin/ksh

get_file_totals()
{

    if [ -e "$file_name" ]
    then
        IFS=''
        while read line
        do
        curr_rec=$line
        echo ${curr_rec:3:4}
        done < "$file_name"
    else

        echo "error"
    fi
}

file_name="$1"
get_file_totals

答え1

あなたが望むksh代替タイプはksh '93以降にのみ有効です。以前のバージョンを使用している可能性はありますか? kshを実行して確認してくださいKSH_VERSION。存在しないか、93より古い場合は古いです。

答え2

再構築する方が効率的であるため、まずこの問題を回避できます。

#!/bin/ksh

get_file_totals()
{

    if [ -e "$file_name" ]
    then
        cut -c4-7 "$file_name"
    else
        echo "error"    # consider stderr by appending >&2
    fi
}

file_name="$1"
get_file_totals

関連情報