shell 中有很多特殊字元,比如表示轉義的「\」、表示命令替換的「`」等,其中有些用得少了就很容易忘記,包括某個字元或是某個功能等的用法。以下是本人自己的備忘錄,僅供參考。
1、「:」(冒號):等價於"no op",是乙個什麼也不幹的命令, 同shell 內建命令 true 的作用相同。可用來作命令佔位符。具體用法如下。
# 1)用在迴圈中
while : # 同:while true
dooperation
done
# 2)在 if/then 中的佔位符
if condition
then : # 什麼都不做,引出分支
else
take-some-action
fi# 3)在引數替換中
: $ $ $ # 如果有任何乙個環境變數沒被設定則列印錯誤資訊
# 4)同重定向操作符結合(這只適用於正規檔案,而不適用於管道、符號鏈結等特殊檔案)
: > data.***
# 清空檔案「data.***」,同 cat /dev/null >data.***,不過不會產生乙個新的程序,因
# 為「:」是乙個內建命令
2、「?」:除了常用的作為測試操作符、三元操作符,以及用在萬用字元和正規表示式中以外,還可以用來測試乙個變數是否被設定了,用法見上面「:」用於引數替換的情況。
3、「$*」和「$@」:表示引用所有位置引數。
4、「$$」:程序 id 變數。
5、「(xx; yy; ...)」:在乙個子 shell 中執行。由於是在子 shell 中,所以括號中的變數對於外界來說是不可用的。
a=123
(a=233; echo $a) # 233
echo $a # 123
6、「」:作笛卡爾擴充套件。其中不允許有空白,除非這個空白被引用或轉義。
cat >combfile # 把 f1、f2 和 f3 連線在一起,並重定向到 comfile 中
cp file. # 同:cp file.txt file.backup
echo \ : # f1 : a f1 : b f1 : c f2 : a f2 : b f2 : c
7、「」:當大括號裡面包含**塊時(注意**塊兩邊要有空格),它相當於建立了乙個匿名函式,只是在其中宣告的變數在大括號外部也是可見的。此外,它不會像上面的「(xx; yy; ...)」一樣會開啟乙個子 shell。
$ a=123
$ # 注意**塊兩邊要有空格
$ echo $a # 321
$ cat rpm-check.sh
#!/bin/bash
err_noargs=65
if [ -z "$1" ]; then
echo "usage: `basename $0` rpm-file"
exit $err_noargs
fi > "$1.test" # 將查詢結果儲存到乙個檔案
echo "results of rpm test in file $1.test"
exit 0
8、「[i]<>filename」:開啟 filename 用來讀寫,並可選地分配檔案描述符 i 給該檔案。如果該檔案不存在,則會被建立。
9、「\<」、「\>」:正規表示式中的單詞邊界,如:grep '\' textfile。
個人常用 常忘記 的GIT命令
之前右鍵的時候,選單上沒有 git bash相關命令,解除安裝重灌,git bash here的選項,勾選 git branch 檢視本地所有分支,並且會標註目前是在哪個分支 git checkout b 本地分支名 origin 遠端分支名 拉取遠端分支並建立本地分支,切換到新分支 git bra...
shell的特殊字元
點 命令 點 命令是乙個shell內部命令,它可以使使用者在當前的shell中執行程式,而不建立子程序。注釋 shell指令碼的注釋符號 重定向符 用法 command filename,可以將command的輸出儲存在filename檔案中。同 類似,但表示追加。用法 command filena...
特殊字元的分隔
特殊字元的分隔 system.out.println 方法一 string aa sss ccc string vv aa.split system.out.println 以 分隔的陣列長度 vv.length system.out.println 方法二 string bb aaaa cccc ...