標籤:linux shell echo
從shell眼中看世界
echo-顯示一行文本
當輸入一個命令,bash在執行命令之前,會對輸入的字元做展開處理。
路徑展開
echo *
shell將*展開為目前的目錄下的檔案名稱,會列印出目前的目錄下的檔案名稱,
echo d* 列印出目前的目錄下所有以d開頭的檔案
echo *d 列印出目前的目錄下所有以d結尾的檔案
~展開
echo ~ 列印出目前使用者的家目錄資訊
echo ~test 列印出test使用者的家目錄資訊
算術運算式展開
echo $((expression))
echo $(((2*3)+5))
echo $(((2**3)*5))
注意運算式的格式,算術運算式只支援整數和加減乘除、取餘、冪運算。
花括弧展開
從一個花括弧的模式中建立多個文本字串
echo hello{1,2,3} 將會輸出hello1 hello2 hello3
echo hello {1,2,3} 將會輸出hello 1 2 3
echo hello{a,b,c} 將會輸出helloa hellob helloc
注意:{}中的元素要用,分隔,可以是字元,也可以是字串
最常見的應用是建立一系列的檔案或目錄
mkdir hello{1,2,3,4,5}
參數展開
echo $USER 列印出使用者名稱
查看變數列表
printenv |less
當展開的變數是不存在的時候,系統會將其展開成為一個Null 字元串
echo $HELLO
命令替換
將一個命令的輸出作為展開式
echo $(ls)
ls -l $(which cp) 將whic cp的輸出資訊作為ls的參數
或是
ls -l `which cp` 舊版的shell支援,倒引號
引用
echo hello world
將會在螢幕上列印出hello world
echo the total is $100.00
將會在螢幕上列印出 the total is 00.00
在第一個中,shell會刪除多餘的空格,在第二個中,$會對1進行變數展開,而1並不是變數,所以會將其展開成為空白字串
shell提供了一種引用的機制,它會有效控制字元的展開
雙引號
第一種參考型別來控制字元的展開
如果在文本兩端添加””,那麼文本中除了$ \ `(倒引號)外,其他字元都將不會有特殊展開含義
在雙引號中,參數展開、運算式展開、命令展開仍然有效
echo “$USER $((2**3)) $(ls)”
echo “hello world” 會列印出hello world
單詞分割機制
echo hello world
這時會輸出hello world
在預設情況下,單詞分割機制會在單詞中尋找空格、定位字元、分行符號,並把它們看作單詞之間的界定符,而每個單詞都是一個參數,在上例中就有兩個參數,列印出每個參數用空格界定
同樣,如果你輸入 echo $(cal)
那麼此時列印出的是一行有空格界定的資料,而不含有分行符號
如果輸入 echo “hello world”
單詞分割被禁止,其實就是””內部的內容作為一個參數存在,而不加””卻是兩個參數
看看 echo $(cal)與echo “$(cal)”的區別
單引號
第二種引用限制字元展開,單引號會限制所有字元的展開,所有的字元只有本身的含義,不存在特殊含義
逸出字元
用\來禁止特殊字元的展開,注意在單引號中\將失去作用
echo \”hello world\”
反斜線逸出序列的使用
\a 發出警告聲;
\b 刪除前一個字元;
\c 最後不加上分行符號號;
\f 換行但游標仍舊停留在原來的位置;
\n 換行且游標移至行首;
\r 游標移至行首,但不換行;
\t 插入tab;
\v 與\f相同;
例如\a響鈴
echo -e ‘\a’ -e選項來解釋逸出字元,雖然\在單引號中失去作用,但-e選項解釋了它
echo $’\a’
不能夠直接echo “\a”
最後學習一個-n選項
-n 不換行的輸出
Echo “hello”;echo “world” 此時會兩行輸出hello world
Echo -n “hello”;echo “world” 則會一行輸出helloworld
tlcl-從shell眼中看世界echo