tlcl-從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

當展開的變量是不存在的時候,系統會將其展開成爲一個空字符串

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章