與 還有 的差別

2021-06-02 13:10:11 字數 2911 閱讀 5953

在bash shell中,$()與``(反引號)都是用來做命令替換(command substitution)的。

*完成引號裡的命令列,然後將其結果替換出阿里,再重組命令列。

例如:

$ echo the last sunday is $(date -d "last sunday" +%y-%m-%d)

${}會比較精確的界定變數名稱的範圍。${}的一些特異功能如下例說明。

例:假設定義乙個變數為:

file=/dir1/dir2/dir3/my.file.txt

我們可以用${}分別替換獲得不同值

$:拿掉第一條/及其左邊的字串:dir1/dir2/dir3/my.file.txt

$:拿掉最後一條/及其左邊的字串:my.file.txt

$:拿掉第乙個.及其左邊的字串:file.txt

$:拿掉最後乙個.及其左邊的字串:txt

$:拿掉最後一條/及其右邊的字串:/dir1/dir2/dir3

$:拿掉第一條/及其右邊的字串:(空值)

$:拿掉最後乙個.及其右邊的字串:/dir1/dir2/dir3/my.file

$:拿掉第乙個.及其右邊的字串:/dir1/dir2/dir3/my

記憶的方法為:

#是去掉左邊(在鍵盤上#在$的左邊)

%是去掉右邊(在鍵盤上%在$的右邊)

單一符號是最小匹配;兩給符號是最大匹配。

$:提取最左邊的5個位元組:/dir1

$:提取第5個位元組右邊的連續5個位元組:/dir2

我們一顆一對變數值裡的字串作替換:

$:將第乙個dir替換為path:/path1/dir2/dir3/my.file.txt

$:將全部dir替換為path:/path1/path2/path3/my.file.txt

利用${}還可以針對不同的變數狀態複製(沒設定、空值、非空值、):

$:假如$file沒有設定,則使用my.file.txt作傳回值。(空值及非空值時不作處理)

$:假如$file沒有設定或為空值,則使用my.file.txt作傳回值。(非空值不作處理)

$:假如$file為空值或非空值,均使用my.file.txt作傳回值。(沒設定時不作處理)

$:若$file為非空值,則使用my.file.txt作傳回值。(沒設定及空值時不作處理)

$:若$file沒設定,則使用my.file.txt作傳回值,同時將$file賦值為my.file.txt。(空值及非空值時不作處理)

$:若$file沒設定或為空值,則使用my.file.txt作傳回值,同時將$file賦值為my.file.txt。(非空值時不作處理)

$:若$file沒設定,則將my.file.txt輸出至stderr。(空值及非空值不作處理)

$:若$file沒設定或為空值,則將my.file.txt輸出至stderr。(非空值時不作處理)

以上的理解:一般而言,:與null有關,若不帶:的話,null不受影響,若帶:則連null也受影響。

$:可計算出變數值的長度:

$:可得到27,以為/dir1/dir2/dir3/my.file.txt剛好是27個位元組

bash中的陣列(array)的處理方法。

一般而言,a="a b c def"這樣的變數知識將$a替換為乙個單一的字串,

但是改為a=(a b c def),則是將$a定義為陣列...

$ 或 $

可得到a b c def(全部元素)

$

可得到a(第乙個元素),$則為第二個元素

$或$

可得到4(全部元素數量)

$

可得到1(即第乙個元素(a)的長度),$可得到3(第四個元素(def)的長度)

a[3]=xyz

則是將第四個元素重新定義為xyz

$(())的用途:它是用來作整數運算的。

在bash中,$(())的整數原酸符號大致有如下這些:

+ - * /:分別為「加、減、乘、除「。

%:餘數運算

& | ^ ! :分別為「and、or、xor、not」運算。

$ a=5; b=7; c=2

$ echo $(( a+b*c ))

19$ echo $(( (a+b)/c ))

6$ echo $(( (a*b)%c))

1

在$(())中的變數名稱,可在其前面加$符號來替換,也可以不用,如:

$(($a + $b * $c))也可得到19的結果

注:在$(())中,變數與運算符號之間是否有空格都是合法的。

此外,$(())還可以作不同進製(如二進位制、八進位制、十六進製制)作運算,只是輸出結果皆為十進位制。

echo $((16#2a))結果為42(十六進製制轉為十進位制)

例:假如當前的umask是022,那麼新建檔案的許可權即為:

$ umask 022

$ echo "obase=8;$(( 8#666 & (8#777 ^ 8#$(umask)) ))" | bc

644

事實上,單純用(())也可以重定義變數值,或作testing:

a=5;((a++))可將$a重定義為6

a=5;((a--))則為a=4

a=5;b=7;((a常見的用於(())的測試符號有如下這些:

<:小於

>:大於

<=:小於或等於

>=:大於或等於

==:等於

!=:不等於

注使用(())作整數測試時,不要跟的整數測試搞混亂了。

shell程式中 還有 的區別

1 在 bash shell 中,與 反引號 都是用來做命令替換用 所謂的命令替換與變數替換差不多,都是用來重組命令列 完成引號裡的命令列,然後將其結果替換出來,再重組命令列。例如 echo the last sunday is date d last sunday y m d 在操作上,用 或 都...

git與svn操作與差別

後續會繼續補充 git與svn差別 1 svn的安全控制和許可權管理更好,非分布式,gui工具,svn分支是複製全部檔案,是乙個完整的目錄 2 git的分支是優勢,只是獲取元素而非複製,分布式工作方式,而且git是映象,需要更新全部內容,內容儲存使用sha 1雜湊演算法,保證了內容完整性,git離線...

勞動差別與價值形成

馬克思在 資本論 中指出商品價值是凝結在商品中的無差別的人類勞動,具體由生產該商品所需的社會必要勞動時間決定,而社會必要勞動時間是在現有的社會正常的生產條件下,在社會平均的勞動熟練程度和勞動強度下製造某種使用價值所需要的勞動時間。這一結論包含著很多資訊,其中兩點很重要 一 人類勞動須是 無差別 的 ...