KSH字符串格式化问题



我在KSH脚本中有一个转换函数:

function convert_string_to_seconds
{
# $1: time as a string e.g. 200s (for 200 seconds)
# output: $time_in_seconds containing the input string converted into seconds

typeset timeselector input numeral
typeset -i in

input=$1
numeral=$(print ${input%?})
timeselector=$(print ${input#${input%%?}})
case $timeselector in
("s")
time_in_seconds=$numeral
break ;;
("m")
time_in_seconds=$(( $numeral * 60 ))
break ;;
("h")
time_in_seconds=$(( $numeral * 3600 ))
break ;;
(*)
exit 7
;;
esac
}

这个值来自一个配置文件,它有这样一行:

MAXRECOVERY=200s

获取该值的代码是:

value=$(echo $line | cut -d '=' -f 2)

如果我运行convert_string_to_seconds $value,那么input=200s,numerals=200stimeselector=""如果我运行convert_string_to_seconds 200s,那么input=200s,numerals=200timeselector=s

如果我运行echo "|${value}|",我得到的是|200s|,所以没有空格,n或类似的东西。

我错过了什么?

尝试:

input=$1
input="$1"
input=$(printf '%sn' "$1")
numeral=$(print ${value%?})
numeral=$(print ${value%?} | tr -d "r")
timeselector=$(echo $value | sed 's/.*(.)/1/')
timeselector=$(print ${value#${value%%?}} | tr -d "r")

尽管echo "|"$input"|"返回|200s|,但看起来有一个r隐藏在我的输入中,所以用input=$(echo $1 | tr -d "r")替换input=$1修复了这个问题