bash中 的誤區

2021-08-26 18:46:38 字數 1389 閱讀 8722

糾結一段**好幾天,linux下不會看反彙編,不知道shell裡面怎麼跑,於是栽了個跟頭。

#!/bin/bash

str1="hello"

str2="world"

if [ "$str1"=="$str2" ]; then

#"=="兩邊沒有空格

echo "$str1 == $str2"

else

echo "$str1 != $str2"

fiif [ "$str1" == "$str2" ]; then

#"=="兩邊有空格

echo "$str1 == $str2"

else

echo "$str1 != $str2"

fi

結果大失所望,第一次竟然輸出hello == world !」==「兩邊的空格對shell到怎麼做了什麼?百思不得其解,問了杰哥,杰哥回給我的郵件。

if [ 1 ]; then

.....

if [ 0 ] ;then

.....

if [ -1 ]; then

.....

if [ "$hello" ]; then

....

if [ "hello" ]; then

.....

if [ "hello"= ]; then #「=」兩邊沒有空格

.....

再看:」==「兩邊都有空格,變化的是」「左右的空格!

[firefox@fire shell]$ [ "china" == "china" ] && echo "yes"

yes[firefox@fire shell]$ ["hello" == "china" ] && echo "yes"

bash: [hello: command not found...

檔案搜尋失敗: invalid input passed to daemon: char '[' in text!

yes[firefox@fire shell]$ [ "hello" == "china"] && echo "yes"

bash: [: 缺少 `]'

我在命令列裡,輸入

$ help [

出來的結果解決了所有矛盾,打破了我一直以來的誤區,」[「也是個命令!

if [ "$str1" == "$str2" ]

#有空格「["是命令,空格,第乙個引數是$str1,空格,第二個引數是」==「,空格,第三個引數是$str2,空格,第四個引數是"]「。

天! 「]」只是簡簡單單的乙個引數而已!!!

bash 中的括號

命令組。括號中的命令將會新開乙個子shell順序執行,所以括號中的變數不能夠被指令碼餘下的部分使用。括號中多個命令之間用分號隔開,最後乙個命令可以沒有分號,各命令和括號之間不必有空格。命令替換。等同於 cmd shell掃瞄一遍命令列,發現了 cmd 結構,便將 cmd 中的cmd執行一次,得到其標...

bash中的陣列

定義 array 1 two 3 four array index value 訪問陣列元素 array必須用大括號括起來 獲取陣列所有元素 元素之間以空格分隔 獲取陣列長度 按下標遍歷 for i in seq 1 do echo i,done 按元素遍歷 必須加雙引號 for var in 注 ...

bash中的測試

三種測試命令 test expression expression expression expression中沒乙個元素前後都要有空格 數值測試 gt 是否大於 ge 是否大於等於 eq 是否等於 ne 是否不等於 lt 是否小於 le 是否小於等於 字串測試 是否等於 是否大於 是否小於 是否不...