国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

ludi的個(gè)人空間 http://m.qingdxww.cn/space-uid-138953.html [收藏] [復(fù)制] [RSS]

博客

bash shell 中如何區(qū)別 $()和${}和$(())和(())

已有 1637 次閱讀2017-12-6 11:40 |個(gè)人分類:c語言

$()和${}的用法:

bash shell 中,$( ) 與 ` ` (反引號(hào)) 都是用來做命令替換用(command substitution)的。而 $( ) 并不見的每一種 shell 都能使用,若你用 bash2 的話,肯定沒問題...

${ } 吧... 它其實(shí)就是用來作變量替換用的啦。一般情況下,$var 與 ${var} 并沒有啥不一樣。但是用 ${ } 會(huì)比較精確的界定變量名稱的范圍。

我這里再用一些例子加以說明 ${ } 的一些特異功能:

假設(shè)我們定義了一個(gè)變量為:

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

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

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

${file##*/}:拿掉最后一條 / 及其左邊的字符串:my.file.txt

${file#*.}:拿掉第一個(gè) . 及其左邊的字符串:file.txt

${file##*.}:拿掉最后一個(gè) . 及其左邊的字符串:txt

${file%/*}:拿掉最后條 / 及其右邊的字符串:/dir1/dir2/dir3

${file%%/*}:拿掉第一條 / 及其右邊的字符串:(空值)

${file%.*}:拿掉最后一個(gè) . 及其右邊的字符串:/dir1/dir2/dir3/my.file

${file%%.*}:拿掉第一個(gè) . 及其右邊的字符串:/dir1/dir2/dir3/my

記憶的方法為:

# 是去掉左邊(在鑒盤上 # 在 $ 之左邊)

% 是去掉右邊(在鑒盤上 % 在 $ 之右邊)

單一符號(hào)是最小匹配﹔兩個(gè)符號(hào)是最大匹配。

${file:0:5}:提取最左邊的 5 個(gè)字節(jié):/dir1

${file:5:5}:提取第 5 個(gè)字節(jié)右邊的連續(xù) 5 個(gè)字節(jié):/dir2

我們也可以對(duì)變量值里的字符串作替換:

${file/dir/path}:將第一個(gè) dir 提換為 path:/

path1/dir2/dir3/my.file.txt

${file//dir/path}:將全部 dir 提換為 path:/

path1/path2/path3/my.file.txt

利用 ${ } 還可針對(duì)不同的變量狀態(tài)賦值(沒設(shè)定、空值、非空值):

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

${file:-my.file.txt} :假如 $file 沒有設(shè)定或?yàn)榭罩担瑒t使用my.file.txt 作傳回值。 (非空值時(shí)不作處理)

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

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

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

${file:=my.file.txt} :若$file沒設(shè)定或?yàn)榭罩担瑒t使用my.file.txt作傳回值,同時(shí)將 $file 賦值為my.file.txt 。(非空值時(shí)不作處理)

${file?my.file.txt} :若 $file 沒設(shè)定,則將 my.file.txt 輸出至STDERR。 (空值及非空值時(shí)不作處理)

${file:?my.file.txt} :若 $file 沒設(shè)定或?yàn)榭罩担瑒t將 my.file.txt 輸出至 STDERR。 (非空值時(shí)不作處理)

以上的理解在于, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態(tài).

一般而言, : 與 null 有關(guān), 若不帶 : 的話, null 不受影響, 若帶 : 則連null 也受影響.

還有哦,${#var} 可計(jì)算出變量值的長(zhǎng)度:

${#file} 可得到 27 ,因?yàn)?/dir1/dir2/dir3/my.file.txt 剛好是 27 個(gè)字節(jié)...

$(())的用途:

它是用來作整數(shù)運(yùn)算的。

bash 中,$(( )) 的整數(shù)運(yùn)算符號(hào)大致有這些:

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

% :余數(shù)運(yùn)算

& | ^ !:分別為 "AND、OR、XOR、NOT" 運(yùn)算。

舉例:

wangnc>a=5;b=7;c=2;

wangnc>echo $a + $b

5 + 7

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

19

wangnc>echo $(((a*b)/c))

17

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

19

wangnc>

$(( )) 中的變量名稱,可于其前面加 $ 符號(hào)來替換,也可以不用,如:

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

此外,$(( )) 還可作不同進(jìn)位(如二進(jìn)制、八進(jìn)位、十六進(jìn)制)作運(yùn)算呢,只是,輸出結(jié)果皆為十進(jìn)制而已:

echo $((16#2a)) 結(jié)果為 42 (16進(jìn)位轉(zhuǎn)十進(jìn)制)

(())的用途:

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

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

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

a=5; b=7; ((a < b)) 會(huì)得到 0 (true) 的返回值。

常見的用于 (( )) 的測(cè)試符號(hào)有如下這些:

<:小于 >:大于

<=:小于或等于 >=:大于或等于

==:等于

!=:不等于

 


路過

雞蛋

鮮花

握手

雷人

評(píng)論 (0 個(gè)評(píng)論)

facelist

您需要登錄后才可以評(píng)論 登錄 | 立即注冊(cè)

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
返回頂部
主站蜘蛛池模板: 麻豆va在线精品免费播放 | 中文字幕日韩欧美一区二区三区 | 青青草手机在线观看 | 亚洲宅男天堂 | 免费观看成人www精品视频在线 | 久久青青国产 | 国产性精品| 在线观看黄日本高清视频 | haodiaokan| 午夜精品久久久久久91 | 欧美日韩一区二区三区高清不卡 | 日韩在线伦理片免费观看 | 免费视频一区二区 | 奇米精品一区二区三区在 | 99cao| 天堂在线国产 | 青青青国产在线观看免费网站 | 国产精品自产拍视频观看 | 精品一区二区三区在线视频 | 国产一级毛片在线 | 污网站免费观看 | 妈妈的朋友韩国在线播放 | 日本一区二区三区精品 | 干天天| 亚洲欧美日本综合 | 亚洲图片 自拍偷拍 | 幸福宝app丝瓜下软件大全 | 美国大片免费观看45分钟 | 天堂网. www在线资源 | 青青草国产精品久久 | 在线观看国产精品日本不卡网 | 性色aⅴ闺蜜一区二区三区 性色a v 一区 | 免费国产小视频在线观看 | 欧美日韩视频在线一区二区 | 国产精品成人四虎免费视频 | 爱豆传媒免费最新视频下载 | 欧美成人一区二区三区不卡视频 | 欧美丝袜高跟鞋一区二区 | 成人国产亚洲欧美成人综合网 | xxxx日本在线播放免费不卡 | 青青青青久在线观看视频 |