tlcl 從shell眼中看世界echo

2021-12-29 22:45:55 字數 2530 閱讀 7673

從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 將會輸出hello1 hello2 hello3

echo hello 將會輸出hello 1 2 3

echo hello 將會輸出helloa hellob helloc

注意:{}中的元素要用,分隔,可以是字元,也可以是字串

最常見的應用是建立一系列的檔案或目錄

mkdir hello

引數展開

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

從 hell眼中看世界 TLCL

字元展開 echo 路徑名展開 echo d 隱藏檔案路徑名展開 ls d 波浪線展開 echo 算術表示式展開 expression 花括號展開 echo number 最常見的應用,建立一系列的檔案或目錄列表。引數展開 echo user printenv less 命令展開 把乙個命令的輸出作...

shell基礎篇(一)從hello world開始

前記 這裡是我做的shell筆記 接下來會提供一系列。shell是一種指令碼語言,那麼,就必須有直譯器來執行這些指令碼。unix linux上常見的shell指令碼直譯器有bash sh csh ksh等,習慣上把它們稱作一種shell。我們常說有多少種shell,其實說的是shell指令碼直譯器。...

shell從函式檔案裡呼叫函式

碰到乙個shell中函式呼叫的小問題,記錄一下。shell中函式有三種呼叫方式,一種是在檔案前面定義函式,然後在以下直接呼叫 一種是通重載入shell,在shell中直接呼叫 第三種是將函式寫入檔案。然後在其它shell中呼叫函式。這裡寫一下關於第三種方法的樣例 is it a directory ...