Bash Shell 中的特殊字元

來源:互聯網
上載者:User

標籤:bash shell 特殊字元

什麼是Bash Shell中的特殊字元?某些特殊字元在Bash Shell裡不是表示其字元含義本身,而是另有含義,稱為:meta-meaning。

  • 1.字元:#

代表注釋,如果有一行以#開始,那麼意味著這行不會被執行,只是一行說明注釋。

例如:

# this is comments

這是一行注釋。


但是這裡有個例外,那就是指令碼的第一行我們經常看到的:

#!/bin/bash

這個指示一個指令碼的解譯器,說明這個指令碼是由/bin/bash 來解釋的。


從#為開始,後面的字元即為注釋,直到該行結束。體會下面幾個例子:

echo "The # here does not begin a comment."echo ‘The # here does not begin a comment.‘

引用內的字元按原意輸出。

echo The \# here does not begin a comment.

這個使用了\把#做了轉義,即把#原樣輸出。

echo The # here begins a comment.

這個慘了,被截斷了,只輸出: The

echo ${PATH#*:}

這個是參數替換,不是注釋符。

echo $(( 2#101011 ))

這個是基數指示符,也不是注釋符,說明後面的數是二進位的。


  • 2.字元:;

分號[semicolon],作為命令的分割符,說明一條命令到此結束。使用分號,你可以在一行寫多條命令,這個我們經常見。

例如:

hdfeel$ echo hello; echo world;helloworldhdfeel$


3.字元:;;

兩個分號在一起[double semicolon],這個只用在case語句裡:

case "$variable" in  abc)  echo "\$variable = abc" ;;  xyz)  echo "\$variable = xyz" ;;esac


  • 4.字元:"

雙引號[double quote]表示部分引用[partial quoting],多數情況下,雙引號內的字元原樣輸出,但其中的變數會被替換。比如:

hdfeel$ fileName="a.txt"hdfeel$ echo "the file name is $fileName"hdfeel$ the file name is a.txt

這可能正是我們需要的。如果你想原樣輸出,那麼用單引號,或者使用反斜線\對$進行轉義。

echo "the file name is \$fileName"echo ‘the file name is $fileName‘


  • 5.字元:’

單引號[single quote],代表全引用[full quoting],引號內的字元全部原樣輸出,即使有變數也不做相應的替換。

例子上面有了,不再重複了。


  • 6.字元:,

逗號[comma operator],串連2個算式,但是只有最後一個算式的值被返回。

hdfeel$ let "t2 = ((a = 9, 15 / 3))"


上面的語句把a賦值為9,並把15除以3的結果5,賦值給t2.

另外,逗號操作符,也可以連接字串:

for file in /{,usr/}bin/*calc#             ^    在/bin和/usr/bin目錄裡,找出所有以"calc"結尾的可執行檔#+                 do        if [ -x "$file" ]        then          echo $file        fidone# /bin/ipcalc# /usr/bin/kcalc# /usr/bin/oidcalc# /usr/bin/oocalc


  • 7.字元:

反斜線[backslash]就是換碼符[escape],為單個字元的引用機制,通過對字元的引用來改變它本來的含義。

比如:

hdfeel$ echo "\"";   // 輸出雙引號hdfeel$ "hdfeel$ x=abchdfeel$ echo “$x”   // 輸出變數的值hdfeel$ abchdfeel$ echo “\$x”  // 原樣輸出hdfeel$ $x


  • 8.字元:`

命令替換符,就是鍵盤的左上方波浪符下面的字元,不要看錯了,不是單引號噢,<code>`</code>中間放一個可執行檔命令<code>`</code>,這個符號也叫反引號。

舉個小例子:

#! /bin/bashinFile=“example.txt"maxLen=12#while read line; do    len=`echo $line | awk ‘{print length($0)}‘`    //  子命令被放到了反引號裡面執行。    if [ $len -lt $maxLen ]; then        echo $line    fidone < $inFile

上面的程式列印出了少於12個字元的行。


  • 9.冒號:

冒號[colon],稱為空白命令[null command],即什麼都不執行,傳回值為true,也就是0,屬於Bash的內建命令。

下面2段代碼把冒號當成了判斷條件:

while :do   operation-1   operation-2   ...   operation-ndone

和上面的代碼實現一樣的功能

while truedo   operation-1   operation-2   ...   operation-ndone

有時它也被用來當預留位置:

if conditionthen :   # Do nothing and branch aheadelse     # Or else ...   take-some-actionfi


冒號:也用來當作域分隔字元,你在/etc/passwd和$PATH變數中可以看到它:

shells hdfeel$ echo $PATH/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinshells hdfeel$


最糟心的時,冒號這東西還可以做函數名,如果想讓代碼把人搞暈的話,這麼搞

:(){  echo "The name of this function is "$FUNCNAME" "  # Why use a colon as a function name?  # It‘s a way of obfuscating your code.}:# The name of this function is :

當然在函數內部,它可以做一個預留位置,這樣函數就不是一個空函數了。

not_empty (){  :} # Contains a : (null command), and so is not empty.


下面的這個比較實用:

{a..z} 產生字元a到z之間的所有字元,當然也可以是數字,比如:{1..9}

體會下這個代碼

echo {a..z} # a b c d e f g h i j k l m n o p q r s t u v w x y z# Echoes characters between a and z.echo {0..3} # 0 1 2 3# Echoes characters between 0 and 3.base64_charset=( {A..Z} {a..z} {0..9} + / = )# Initializing an array, using extended brace expansion.# From vladz‘s "base64.sh" example script.


上面解釋了一些Bash Shell中的部分特殊字元,在<a Advanced Bash-Scripting Guide中有更多、更詳細的介紹,有興趣可以參考。


原文:http://www.hdfeel.net/2015/01/bash-shell-special-character/


本文出自 “HDFeel的IT視點” 部落格,請務必保留此出處http://hdfeel.blog.51cto.com/9805995/1606620

Bash Shell 中的特殊字元

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.