[[
,是關鍵字,許多shell(如ash bsh)並不支援這種方式。ksh, bash(據說從2.02起引入對[[的支援)等支援。
[
是一條命令, 與test等價,大多數shell都支援。在現代的大多數sh實現中,」[「與」test」是內部(builtin)命令,換句話說執行」test」/」[「時不會調
(1)」-gt」, 「-lt」是算術比較操作符,用於比較整數的大小。
(2)」>」, 「<」是字串比較操作符,用於比較字串的大小,使用字典順序,與當前的locale有關。
(3)關於字串比較。[...]
、[[...]]
中都可以對字串進行比較,比較的順序是」字典順序」。對ascii字元來講,碼表中排列在前的較小,如a
,就表示是字串比較,那麼9 > 100
為真,因為這實際上等價於『9』 > 『100』
,9在碼表中排在1後面,所以字串」9」大於字串」100」。只要搞清楚了何時是算術比較,何時是串比較,一般就不會出錯了。
(4)建議在使用數值比較的時候,使用let,(())命令,否則容易出錯;
範例:
「[「用法
$ [ 2
-lt10 ]&&echo
true&&echo
false
true
$ [ 2
-gt10 ]&&echo
true||echo
false
false
$ [ 2 \< 10 ]&&echo
true||echo
false
#you should use "\<"
false
$ [ 2 \> 10 ]&&echo
true||echo
false
#you should use "\>"
true
「[[「用法
$ [[ 2
-gt10 ]]&&echo
true||echo
false
false
$ [[ 2
-lt10 ]]&&echo
true||echo
false
true
$ [[ 2
< 10 ]]&&echo
true||echo
false
false
$ [[ 2 > 10 ]]&&echo
true||echo
false
true
這裡的模式匹配要簡單得多,類似檔名的統配符的擴充套件規則。還要注意等號右端的模式不能用引號括起,使用引用關閉了某些元字元的特殊功能
「[「用法
$ [ test = test ]&&echo
true||echo
false
#normal compare
true
$ [ test = t*t ]&&echo
true||echo
false
#pattern match.
true
$ [ test = t..t ]&&echo
true||echo
false
#not match.
false
$ [ test = t??t ]&&echo
true||echo
false
#note that "?", not "." stands for one single character here
true
$ [ test = "t??t" ]&&echo
true||echo
false
#alert: don't quote the pattern,使用引用關閉了?的特殊功能
false
「[[「用法
$ [[ test = test ]]&&echo
true||echo
false
#normal compare
true
$ [[ test = t*t ]]&&echo
true||echo
false
#pattern match.
true
$ [[ test = t..t ]]&&echo
true||echo
false
#not match.
false
$ [[ test = t??t ]]&&echo
true||echo
false
#note that "?", not "." stands for one single character here
true
$ [[ test = "t??t" ]]&&echo
true||echo
false
# alert: don't quote the pattern,使用引用關閉了?的特殊功能
false
邏輯與和邏輯或
(1)」[「:邏輯與:」-a」;邏輯或:」-o」;
(2)」[[「:邏輯與:」&&」;邏輯或:」||」
$ [[ 1
< 2 && b > a ]]&&echo true||echo false
true
$ [[ 1
< 2 -a b > a ]]&&echo true||echo false
bash: syntax error in conditional expression
bash: syntax error near `-
a'$ [ 1
< 2 -a b > a ]&&echo true||echo false
true
$ [ 1
< 2 && b > a ]&&echo true||echo false #wrong syntax
bash: [: missing `]'
false
$ [ 1
< 2 \&\& b > a ]&&echo true||echo false #aslo wrong
bash: [: &&: binary operator expected
false
命令列引數
(1)[ ... ]
為shell命令,所以在其中的表示式應是它的命令列引數,所以串比較操作符」>」 與」<」必須轉義,否則就變成io重定向了;
(2)由於[[
是關鍵字,不會做命令列擴充套件,所以在[[中<
與>
不需轉義,但是相對的語法就稍嚴格些。例如在[ ... ]
中可以用引號括起操作符,因為在做命令列擴充套件時會去掉這些引號,而在[[ ... ]]
則不允許這樣做;
$ [ "-z"
"" ]&&echo true||echo false
true
$ [ -z "" ]&&echo true||echo false
true
$ [[ "-z"
"" ]]&&echo true||echo false
bash: conditional binary
operator expected
bash: syntax error near `""
'$ [[ -z "" ]]&&echo true||echo false
true
[[ ... ]]
進行算術擴充套件,而[ ... ]
不做$ [[ 99+1 -eq 100 ]]&&echo true||echo false
true
$ [ 99+1 -eq 100 ]&&echo true||echo false
bash: [: 99+1: integer expression expected
false
$ [ $((99+1)) -eq 100 ]&&echo true||echo false
true
正規表示式匹配=~
regular expression match. this operator was introduced with version 3 of bash.參考這裡the =~ regular expression matching operator within a double brackets test expression.
shell中 和 的用法
格式 command1 command2 左邊的命令 命令1 返回真 即返回0,成功被執行 後,右邊的命令 命令2 才能夠被執行 換句話說,如果這個命令執行成功 那麼執行這個命令 命令之間使用 連線,實現邏輯與的功能。只有在 左邊的命令返回真 命令返回值 0 右邊的命令才會被執行。只要有乙個命令返回...
shell中 , 和 的區別
1.首先,儘管很相似,但是從概念上講,二者是不同層次的東西。是關鍵字,許多shell 如ash bsh 並不支援這種方式。ksh,bash 據說從2.02起引入對 的支援 等支援。是一條命令,與test等價,大多數shell都支援。在現代的大多數sh實現中,與 test 是內部 builtin 命令...
shell與cmd的異同
shell可以說是cmd的公升級版 補充版。當然shell在原來cmd基礎上做了很多修改 調整的,且增加了很多命令及命令別名。cmd和powershell都可以通過執行命令開啟,如圖。shell在原來cmd基礎上做了很多修改,包含命令名稱,色彩搭配等。shell命令與cmd命令差別示例,如圖。別名是...