![shell脚本中的子字符串](https://linux22.com/image/65791/shell%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我试图从字符串中获取子字符串,但收到错误:${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