亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

shell 里面的奇葩字符實現

2020-07-27 18:43:08
字體:
來源:轉載
供稿:網友

在我接觸過的編程語言里面,最奇葩的兩個就屬 JavaScript 和 Shell 了。因為它們有著太多的語法糖跟特殊字符,總是能夠讓你措手不及,并且編程習慣也跟Java 和 Python 等語言大相徑庭??傊f不要因為它們是腳本語言就輕視它們,否則你就會被打得暈頭轉向。

這兩個奇葩之間比起來呢,Shell 的奇葩之處在于特殊符號多,騷操作也多。比如你以為 .  這是個點,其實它代表的意思遠不止一個點那么簡單 。

下面的內容是我根據網上資料及平時使用經驗整理的一份Shell 中的特殊字符。如果大家覺得有用的話就點贊收藏吧。

; 單分號,一般作為命令分隔符??梢詫蓚€命令放在同一行。如: echo hello; echo there,但真正寫腳本的時候盡量不要這樣寫。

;; 雙分號,用在 case條件語句的結束符。如:

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

% 百分號,用于表示取余操作,也用于正則表達式。

~  波浪線,表示家目錄,等價于$HOME。如 cd ~

~+  表示當前工作目錄,等價于$PWD。

~-  表示上一個工作目錄,等價于 ..。

|  管道標識符,將上一個命令的輸出作為下一個命令的輸入,經常用到,沒什么好說的。

>|  強制重定向。強制重寫已經存在的文件。

||  表示邏輯或操作。

&  讓命令在后臺運行,例如 command &  一般用于啟動后臺進程服務。

&&  表示邏輯與操作。

* 星號,主要用于通配符匹配,當然也用于乘法表達式。

/ 主要用于轉義特殊字符,比如想轉義雙引號,可以這樣 echo /" 輸出 “。

/  文件路徑分隔符,比如 /opt/app/projects/ 。當然也用作除法表達式。

. 點號,這個符號作用比較多。 首先可以等價于 source 命令。也可以作為文件名字,在文件名開頭,表示該文件是個隱藏文件。 還可以表示當前目錄, 比如拷貝某個文件到當前目錄 cp /opt/app/a.md . 。如果是兩個連續的點則表示上一級目錄,比如 cd ..。
最后,點號也是正則表達式的元字符。

"  雙引號,雙引號里面的變量一般會被解析成賦值的內容。比如

 name=frank echo "hello $name" # hello frank

' 單引號,單引號里面的變量一般不會被解析,比如

 name=frank echo 'hello $name' #hello $name

' 反引號(ESC鍵下面那個),要跟單引號區分開。反引號里面的內容會被當作指令執行,并將執行的結果賦值給變量。比如:

file=`ls ~`echo $file #家目錄下所有文件。

!  感嘆號,一般用于取反。比如 != 表示不等。騷操作在終端中執行,可以表示歷史指令比如 !-3,將會輸出你剛剛輸入的指令。但在腳本中不支持該種寫法。

**  雙星號,算術運算中表示求冪運算。比如

let "a=3**2"echo $a #9

?  問號,表示條件測試;也用作三元運算符。也是正則表達式元字符。

$  美元符,放到變量前面,即引用一個變量的內容,比如:echo $PATH;當然也是正則表達式的元字符。

${} 參數替換。用于在字符串中表示變量值。比如

name=frankecho "hello ${name}" #hello frank

$*,$@ 這兩個特殊字符都用于獲取傳遞給腳本的所有參數。當他們被雙引號包圍時,"$*"會將所有的參數從整體上看做一份數據。而"$@"仍然將每個參數都看作一份數據,彼此之間是獨立的。

$#  表示參數個數。

$?  返回最近的一個命令或腳本的退出狀態碼,正確執行則返回0,否則返回非0。

$$  雙美元符, 返回當前腳本的進程號。

() 小括號,命令組,一組圓括號括起來的命令代表一個命令組,以子shell方式運行。同時小括號里面的的變量類似局部變量,外部不能訪問。比如

a=123( a=321; )echo "a = $a" # a = 123

還可以用于數組初始化。例如

arr=(ele1 ele2 ele3)echo ${arr[1]} # ele2

{xxx,yyy,zzz} 有人叫花括號擴展,我舉幾個例子,可能大家就明白了。注意不能有空格。

echo {a,b,c}-{d,e,f} # a-d a-e a-f b-d b-e b-f c-d c-e c-fcat {file1,file2,file3} > merge_file #將三個file的內容一同輸入merge_filecp file.{txt,backup} #拷貝file.txt成file.backup

{a..z}  跟上面類似,還是看例子吧。

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 zecho {0..3} # 0 1 2 3

{}  花括號,表示代碼塊 ,也用于表示匿名函數。也可以結合重定向符使用。例如:

fileline=~/a.txt{ read line1 read line2 } < $fileline echo $line1 echo $lien2

會將a.txt的前兩行內容賦值給變量line1和line2;

騷操作在xargs -i中,還可以作為文本的占位符,用來標記輸出文本的位置。

比如 ls *.txt | xargs -i -t cp {} {}.bak 會把所有txt文件拷貝一份,命名成txt.bak

{} /;  表示路徑名字。一般跟find命令一起使用。例如 find . -name "*.sh" -exec rm {} /;找出所有sh腳本,然后刪除。注意{} 和 / 之間的空格,分號必須存在。

[]  中括號,用于在里面寫判斷表達式。也可以當作數組用。當然也是正則表達式元字符。

[[]]  雙中括號,也用于在里面寫判斷表達式,比上面但中括號更靈活。

$[]  計算整數表達式,已經不推薦使用。例如

a=3;b=7;echo $[$a+$b] # 10

(())  雙小括號, 計算整數表達式,推薦使用。如

a = 23(( a++ ))echo "a (after a++) = $a" # 24

> ,&>, >&, >>  這四個都是重定向符,分別舉例說明。
cat ~/a.txt >a.log  將文件a.txt的內容輸出到文件a.log中去,如果文件存在則覆蓋;
command &>filename 重定向command的標準輸出(stdout)和標準錯誤(stderr)到文件filename中,一般用于啟動進程腳本;
command >&2 把command的標準輸出(stdout)重定向到標準錯誤(stderr)中;
cat ~/a.txt >> a.log  把a.txt的輸出以追加得方式輸入到文件a.log中,如果文件不存在則創建。

-  短橫線,可用于參數選擇 例如 ls -al。 也可以表示上一個工作目錄,例如 cd -。當然也是數學運算符,用于表示減法操作。

=  等號,數學運算符,賦值操作。 例如

a=28echo $a

也可以用于表示比較操作,例如,if [ "$a" = "$b" ]  注意等號左右兩側要有空格。

#  井號,一般用于注釋語句前面,表示該條語句是注釋。也是正則表達式的元字符。

注意:

腳本的第一行#!/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 $((2#101)) #5 echo $((8#101)) #65 echo $((10#101)) #101

,  逗號,用于連接一連串的數學表達式,這串數學表達式均被求值,但只有最后一個求值結果被返回。例如:

# Set "a = 9" and "t2 = 15 / 3"let "t2 = ((a = 9, 15 / 3))"

也可以用于連接字符串,比如 echo {a,b}/test  輸出 a/test b/test

騷操作  用在變量引用中,表示首字母小寫,如果是兩個逗號,則表示全部小寫。例如

 a="AFrank" echo ${a,} #aFrank echo ${a,,} #afrank

+ 數學運算符,表示加操作。也是正則表達式元字符。

騷操作 用于設置變量值。使用方式 ${parameter+alt_value}  如果變量 parameter 設置了值,則使用 alt_value 的值,否則使用空字符。

舉個例子,感受一下

#param1 not seta=${param1+xyz}echo "a = $a"  # a =#parma2 set nullparam2=a=${param2+xyz}echo "a = $a"  # a = xyzparam3=123a=${param3+xyz}echo "a = $a"  # a = xyz

注意 配合冒號使用時會有不同。舉個例子,繼續感受一下

a=${param4:+xyz}echo "a = $a"  # a =param5=a=${param5:+xyz}echo "a = $a"  # a =#Different result from a=${param5+xyz}param6=123a=${param6:+xyz}echo "a = $a"  # a = xyz

^  用于正則表達式。

騷操作  用于大小寫轉化??聪旅娴睦?。

var=hellFrankecho ${var^}   # HelloFrankecho ${var^^}   # HELLOFRANK

<< 雙小于號,稱作 here-doc。一般用于給命令提供輸入多行內容。比如

tr a-z A-Z <<EOF > one > two > three > EOF

輸出:

ONE  TWO  THREE

默認的,here doc里面的變量會進行替換。比如

cat << EOF > Working dir $PWD > EOF

輸出:Working dir /home/frank

如果給here doc 標識符加上雙引號或者單引號則會禁止變量替換。比如

cat << "EOF" > Working dir $PWD > EOF

輸出:Working dir $PWD

騷操作

再 <<后面添加-,可以忽略TAB空白字符。比如

tr a-z A-Z <<-EOF > one > two > three > EOF 

輸出:ONE  TWO  THREE

<<< 三個小于號,稱作here string,here doc的變種。比here doc更靈活。例如tr a-z A-Z <<<"Yes it is a string" # YES IT IS A STRINGname=frank# 雙引號里面會解析變量tr a-z A-Z <<<"Yes i'm $name" # YES I'M FRANK# 單引號里面不解析變量tr a-z A-Z <<<'Yes i/'m $name' # YES I'M $NAME

: 冒號,表示空,什么都不做,但是有返回值,返回值為0(即true)
例如:: ; echo $? 輸出0。 $? 的意思就是返回上條指令的狀態。
利用此特性可以作為 while 的無限循環條件,也可以作為 if 分支的占位符。

比如

while : #same as while truedo operation-1 operation-2 ... operation-ndone

或者

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

除此之外還可以結合重定向符號使用,將文件內容清空,但是不改變文件權限,如果不存在則會自動創建。

: > data.xxx # File "data.xxx" now empty.

等價于 cat /dev/null >data.xxx 如果以追加方式的重定向,則對文件不構成任何修改。同樣如果文件不存在也會新建一個。例如 : >> data.xxx 。

注意 這個只能在普通文件中使用,不能在管道,符號鏈接和其他特殊文件中使用;

你也可以作為域分隔符,比如環境變量$PATH中,或者passwd中,都有冒號的作為域分隔符的存在;例如
usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/games

騷操作 設置默認值,如果param沒有設置,則使用默認值,例如

parma=frankecho ${param:=default} #frankecho ${test:=default} #default

你也可以將冒號作為函數名,不過這個會將冒號的本來意義轉變,所以不要這么搞。

:(){ echo "The name of this function is colon"}

以上內容來源參考:(http://tldp.org/LDP/abs/html/special-chars.html),希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区在线| 影音先锋欧美精品| 欧美激情精品久久久久久变态| 久久影视电视剧免费网站| 国产亚洲精品成人av久久ww| 亚洲天堂影视av| 日韩高清电影免费观看完整版| 国产精品久久国产精品99gif| 国产专区精品视频| 精品久久久久久久久久久| 9.1国产丝袜在线观看| 日韩av有码在线| 午夜精品福利电影| 欧美日韩国产精品专区| 欧美放荡办公室videos4k| 亚洲欧美三级伦理| 成人天堂噜噜噜| 亚洲伊人一本大道中文字幕| 中文字幕日韩欧美精品在线观看| 在线免费观看羞羞视频一区二区| 亚洲亚裔videos黑人hd| 中文字幕免费精品一区高清| 欧美日韩一区二区免费在线观看| 91久久久久久久久久久| 日本精品视频网站| 国产一区二区三区免费视频| 青草青草久热精品视频在线网站| 国产+人+亚洲| 91精品美女在线| 国产欧美 在线欧美| 97热在线精品视频在线观看| 国产精品永久免费在线| 欧美大学生性色视频| 欧美精品久久久久久久| 操日韩av在线电影| 亚洲日韩中文字幕| 国产精品白丝jk喷水视频一区| 欧美激情a在线| 国产精品久久久久一区二区| 亚洲视频在线看| 欧美日韩国产二区| 精品福利在线视频| 成人国产精品久久久久久亚洲| 国产日韩在线精品av| 日韩国产精品一区| 欧美高清在线视频观看不卡| 夜夜嗨av一区二区三区免费区| 欧美午夜精品在线| 久久电影一区二区| 欧美日韩免费一区| 欧美天堂在线观看| 国产精品一二三视频| 国产一区私人高清影院| 亚洲人成电影在线播放| 亚洲石原莉奈一区二区在线观看| 久久久噜噜噜久噜久久| 亚洲图片在线综合| 中文字幕av一区二区| 综合国产在线观看| 亚洲美女中文字幕| 精品久久久一区二区| 久久影视电视剧凤归四时歌| 精品精品国产国产自在线| 国内精品模特av私拍在线观看| 国产一区二区三区在线免费观看| 美女av一区二区三区| 中文字幕一区二区三区电影| 日韩亚洲欧美中文高清在线| 九九精品视频在线观看| 国产玖玖精品视频| 亚洲毛片一区二区| 日韩美女在线播放| 欧美日韩中文字幕综合视频| 欧美性资源免费| 色偷偷88888欧美精品久久久| 中文字幕自拍vr一区二区三区| 日韩精品一区二区视频| 国产精品18久久久久久首页狼| 91夜夜揉人人捏人人添红杏| 亚洲全黄一级网站| 精品亚洲va在线va天堂资源站| 国产成人在线视频| 国产日韩在线看| 色综合伊人色综合网站| 中文字幕精品影院| 欧美亚洲国产视频| 热久久这里只有精品| 亚洲女人被黑人巨大进入al| 久久艳片www.17c.com| 亚洲xxxx做受欧美| 欧美午夜精品久久久久久浪潮| 久久伊人精品一区二区三区| 亚洲美女自拍视频| 亚洲色图第一页| 国产精品精品久久久| 视频在线观看一区二区| 伊人久久久久久久久久久久久| 亚洲视频电影图片偷拍一区| 伊人久久精品视频| 欧美日韩国产第一页| 久操成人在线视频| 日韩av免费网站| 国产精品扒开腿做| 亚洲国产成人在线播放| 欧美一区二区大胆人体摄影专业网站| 亚洲欧洲国产一区| 日本精品va在线观看| 欧美精品在线看| 热久久免费国产视频| 中文字幕久热精品在线视频| 色777狠狠综合秋免鲁丝| 美女性感视频久久久| 日韩免费在线观看视频| 亚洲欧美成人精品| 国产91精品久久久久| 精品国偷自产在线| 伊人一区二区三区久久精品| 亚洲国产又黄又爽女人高潮的| 成人午夜高潮视频| 九色精品美女在线| 国产精品成人观看视频国产奇米| 国产视频丨精品|在线观看| 国产99久久久欧美黑人| 国产一区二区在线播放| 久久久久久久久久久人体| 欧美日韩免费网站| 亚洲精品美女在线观看| 亚洲欧美国产精品va在线观看| 5278欧美一区二区三区| 日韩电影视频免费| 亚洲一区二区三区成人在线视频精品| 欧美激情国产日韩精品一区18| 亚洲一区二区自拍| 久久成人精品电影| 国产精品jizz在线观看麻豆| 日韩av第一页| 久久成人精品一区二区三区| 国产精品久久久久久久久久小说| 欧美人成在线视频| 国产精品久久久av久久久| 亚洲三级免费看| 亚洲国产欧美一区二区三区久久| 国产成人精品视频在线观看| 欧美男插女视频| 欧美国产在线视频| 92裸体在线视频网站| 最新国产精品拍自在线播放| 久久综合电影一区| 亚洲国产日韩欧美综合久久| 成人97在线观看视频| 国产一区二区三区高清在线观看| 国产97人人超碰caoprom| 欧美日韩免费观看中文| 成人天堂噜噜噜| 在线观看亚洲视频| 亚洲最大福利网站| 国产一区二区三区久久精品| 欧美xxxwww| 4388成人网| 日韩欧美大尺度| 久久久久久av| 国产日韩在线免费| 福利精品视频在线| 777国产偷窥盗摄精品视频|