一、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選項:指定讀取命令把一個\(反斜線)處理為輸入行的一部分,而不把它作為一個控制字元。