当打印开头有空格的子字符串时,将删除前导空格。
$ line="C , D,E,";
$ echo "Output-`echo ${line:3}`";
Output-D,E,
为什么从输出中删除前导空格以及如何打印空格?
答案 0 :(得分:4)
子串操作
${line:3}
将提取从位置3开始的所有字符,其确实是:[ D,E,]
(为了便于阅读,我添加了[])。
但是,在命令替换echo ${line:3}
中,shell执行分词并删除前导空白字符,结果为D,E,
。
将子字符串表达式放在双引号中以保留前导空格,如下所示:
echo "Output-"`echo "${line:3}"` # => Output- D,E,
为了更清楚地理解这一点,试试这个:
line="C , D,E," # $() does command substitution like backquotes; it is a much better syntax
string1=$(echo "${line:3}") # double quotes prevent word splitting
string2=$(echo ${line:3}) # no quotes, shell does word splitting
string3="$(echo ${line:3})" # since double quotes are outside but not inside $(), shell still does word splitting
echo "string1=[$string1], string2=[$string2], string3=[$string3]"
给出输出:
string1=[ D,E,], string2=[D,E,], string3=[D,E,]
另见:
答案 1 :(得分:-1)
Shell不会在参数之间保留多个空格,因此这两个空格会折叠为一个。
.toggle()
评估为:
echo "Output-`echo ${line:3}`";
和
echo "Output-`echo -D,E,`";
评估为:
echo -D,E,
换句话说,echo接收两个调用的相同参数:
-D,E,
当参数作为字符串数组到达时,结束每个字符串已被修剪(周围没有空格)。