我想要做的是从字符串中产生子串。但问题在于空间。
问题在于字符串中的空格。
当空格落在两个字符之间时,子字符串包含空格,但是当空格位于要提取的子字符串的开头时,则不包括空格。
下面的例子将解释它:
我正在使用" echo $ {string:position:length} "
INPUT:" vishal singh"
- 当position = 6且length = 4时;那么OUTPUT =" sin"
醇>
忽略了这里的空间
- 当position = 5且length = 4时;那么OUTPUT =" l si"
醇>
但不在这里
注意:我需要第一个例子中的空格。我是shell脚本的新手。
export LC_ALL=C
readarray -t ar
read pos
read len
l=${#ar}
if [ "$l" -gt 100 ] || [ "$l" -lt 1 ]
then
exit
fi
for index in ${!ar[@]}
do
echo ${ar[index]:$pos:$len}
done
答案 0 :(得分:3)
双引用你需要保留空格的表达式。
echo "${ar[index]:$pos:$len}"
否则,将单词拆分应用于删除空格的参数扩展。请参阅man bash
中的 Word Splitting (强调我的):
shell扫描参数扩展,命令替换和结果 用于分词的双引号内未发生的算术扩展。