一、read命令读取文件时会自动去掉行前后的空格。
a.txt:(每行前后都有空格)
11111
222222
3333333
a.sh:
#!/bin/bash
while read oneline;do
echo "$oneline"
done < ./a.txt
执行结果:
111111
222222
333333
二、在字符串中使用变量时请使用${变量名}
a.sh:
#!/bin/bash
a="1"
b="2"
echo "$a_$b"
执行结果:
2
修改如下后:
echo "${a}_${b}"
执行结果:
1_2
原因:
在第一个脚本中,程序会去获取a_的值,因为没有定义,所以为空。
三、echo时奇怪的空格
a.sh:
#! /bin/bash
echo -ne \
"123\n"\
"123\n"\
"123\n"
执行结果:
123
123
123
第二和三行多了一个空格,原因不明,但是可以使用如下方法回避。
1.
echo -ne \
"123\n"\
"123\n"\
"123\n"
2.
echo -ne \
"123"\
"\n123"\
"\n123\n"
四、select菜单项中包含空格
a.sh:
#! /bin/bash
a="\"123\" \"quit without saving\" \"32131\""
select b in $a
do
:
done
运行结果:
1) "123"
2) "quit
3) without
4) saving"
5) "32131"
#?
回避方法:
#! /bin/bash
a=("123" "quit without saving" "32131")
select b in "${a[@]}"
do
:
done
运行结果:
1) 123
2) quit without saving
3) 32131
a.txt:(每行前后都有空格)
11111
222222
3333333
a.sh:
#!/bin/bash
while read oneline;do
echo "$oneline"
done < ./a.txt
执行结果:
111111
222222
333333
二、在字符串中使用变量时请使用${变量名}
a.sh:
#!/bin/bash
a="1"
b="2"
echo "$a_$b"
执行结果:
2
修改如下后:
echo "${a}_${b}"
执行结果:
1_2
原因:
在第一个脚本中,程序会去获取a_的值,因为没有定义,所以为空。
三、echo时奇怪的空格
a.sh:
#! /bin/bash
echo -ne \
"123\n"\
"123\n"\
"123\n"
执行结果:
123
123
123
第二和三行多了一个空格,原因不明,但是可以使用如下方法回避。
1.
echo -ne \
"123\n"\
"123\n"\
"123\n"
2.
echo -ne \
"123"\
"\n123"\
"\n123\n"
四、select菜单项中包含空格
a.sh:
#! /bin/bash
a="\"123\" \"quit without saving\" \"32131\""
select b in $a
do
:
done
运行结果:
1) "123"
2) "quit
3) without
4) saving"
5) "32131"
#?
回避方法:
#! /bin/bash
a=("123" "quit without saving" "32131")
select b in "${a[@]}"
do
:
done
运行结果:
1) 123
2) quit without saving
3) 32131
#?
五、read后消失的反斜杠
a.txt:
123
32\1
1/23
a.sh:
#! /bin/bash
while read oneline;do
echo $oneline
done < a.txt
执行结果:
123
321
1/23
其中\被当作命令的换行符,自动去掉了。
修正方法:
a.sh:
#! /bin/bash
while read -r oneline;do
echo $oneline
done < a.txt
执行结果:
123
321
1/23
-r选项:指定读取命令把一个\(反斜杠)处理为输入行的一部分,而不把它作为一个控制字符。