shell相关注意点

来源:互联网 发布:unix 环境高级编程 3 编辑:程序博客网 时间:2024/05/16 04:49
一、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

#?



五、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选项:指定读取命令把一个\(反斜杠)处理为输入行的一部分,而不把它作为一个控制字符。

0 0
原创粉丝点击