shell相關注意點

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.