青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統(tǒng)計(jì)

最新評論

shell中$(( )) 與 $( ) 還有${ }的區(qū)別

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

所謂的命令替換與我們第五章學(xué)過的變量替換差不多,都是用來重組命令行:
* 完成引號里的命令行,然后將其結(jié)果替換出來,再重組命令行。
例如:
[code]$ echo the last sunday is $(date -d "last sunday" +%Y-%m-%d)[/code]
如此便可方便得到上一星期天的日期了… ^_^

用 $( ) 的理由:

1,   ` ` 很容易與 ' ' ( 單引號)搞混亂,尤其對初學(xué)者來說。
有時(shí)在一些奇怪的字形顯示中,兩種符號是一模一樣的(直豎兩點(diǎn))。
當(dāng)然了,有經(jīng)驗(yàn)的朋友還是一眼就能分辯兩者。只是,若能更好的避免混亂,又何樂不為呢? ^_^

2, 在多層次的復(fù)合替換中,` ` 須要額外的跳脫( \` )處理,而 $( ) 則比較直觀。例如:
這是錯(cuò)的:
[code]command1 `command2 `command3` `[/code]
原本的意圖是要在 command2 `command3` 先將 command3 提換出來給 command 2 處理,
然后再將結(jié)果傳給 command1 `command2 …` 來處理。
然而,真正的結(jié)果在命令行中卻是分成了 `command2 ` 與 “ 兩段。
正確的輸入應(yīng)該如下:
[code]command1 `command2 \`command3\` `[/code]

要不然,換成 $( ) 就沒問題了:
[code]command1 $(command2 $(command3))[/code]
只要你喜歡,做多少層的替換都沒問題啦~~~   ^_^

$( ) 的不足:
1. ` ` 基本上可用在全部的 unix shell 中使用,若寫成 shell script ,其移植性比較高。
而 $( ) 并不見的每一種 shell 都能使用,我只能跟你說,若你用 bash2 的話,肯定沒問題…   ^_^

${ } 用來作變量替換。
一般情況下,$var 與 ${var} 并沒有啥不一樣。
但是用 ${ } 會(huì)比較精確的界定變量名稱的范圍,比方說:
$ A=B
$ echo $AB
原本是打算先將 $A 的結(jié)果替換出來,然后再補(bǔ)一個(gè) B 字母于其后,
但在命令行上,真正的結(jié)果卻是只會(huì)提換變量名稱為 AB 的值出來…
若使用 ${ } 就沒問題了:
$ echo ${A}B
BB

不過,假如你只看到 ${ } 只能用來界定變量名稱的話,那你就實(shí)在太小看 bash 了﹗
有興趣的話,你可先參考一下 cu 本版的精華文章:
http://www.chinaunix.net/forum/viewtopic.php?t=201843

為了完整起見,我這里再用一些例子加以說明 ${ } 的一些特異功能:
假設(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
記憶的方法為:
[list]# 是去掉左邊(在鑒盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑒盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個(gè)符號是最大匹配。[/list]
${file:0:5}:提取最左邊的 5 個(gè)字節(jié):/dir1
${file:5:5}:提取第 5 個(gè)字節(jié)右邊的連續(xù) 5 個(gè)字節(jié):/dir2

我們也可以對變量值里的字符串作替換:
${file/dir/path}:將第一個(gè) dir 提換為 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:將全部 dir 提換為 path:/path1/path2/path3/my.file.txt

利用 ${ } 還可針對不同的變量狀態(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)榭罩?,則使用 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)榭罩?,則將 my.file.txt 輸出至 STDERR。 (非空值時(shí)不作處理)

 

tips:
以上的理解在于, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態(tài).
一般而言, : 與 null 有關(guān), 若不帶 : 的話, null 不受影響, 若帶 : 則連 null 也受影響.

還有哦,${#var} 可計(jì)算出變量值的長度:
${#file} 可得到 27 ,因?yàn)?/dir1/dir2/dir3/my.file.txt 剛好是 27 個(gè)字節(jié)…

接下來,再為大家介稍一下 bash 的組數(shù)(array)處理方法。
一般而言,A="a b c def" 這樣的變量只是將 $A 替換為一個(gè)單一的字符串,
但是改為 A=(a b c def) ,則是將 $A 定義為組數(shù)…
bash 的組數(shù)替換方法可參考如下方法:
${A[@]} 或 ${A[*]} 可得到 a b c def (全部組數(shù))
${A[0]} 可得到 a (第一個(gè)組數(shù)),${A[1]} 則為第二個(gè)組數(shù)…
${#A[@]} 或 ${#A[*]} 可得到 4 (全部組數(shù)數(shù)量)
${#A[0]} 可得到 1 (即第一個(gè)組數(shù)(a)的長度),${#A[3]} 可得到 3 (第四個(gè)組數(shù)(def)的長度)
A[3]=xyz 則是將第四個(gè)組數(shù)重新定義為 xyz …

好了,最后為大家介紹 $(( )) 的用途吧:它是用來作整數(shù)運(yùn)算的。
在 bash 中,$(( )) 的整數(shù)運(yùn)算符號大致有這些:
+ - * / :分別為 "加、減、乘、除"。
% :余數(shù)運(yùn)算
& | ^ !:分別為 "AND、OR、XOR、NOT" 運(yùn)算。

例:
$ 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 的結(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)制)
以一個(gè)實(shí)用的例子來看看吧:
假如當(dāng)前的   umask 是 022 ,那么新建文件的權(quán)限即為:
$ umask 022
$ echo "obase=8;$(( 8#666 & (8#777 ^ 8#$(umask)) ))" | bc
644

事實(shí)上,單純用 (( )) 也可重定義變量值,或作 testing:
a=5; ((a++)) 可將 $a 重定義為 6 
a=5; ((a–)) 則為 a=4
a=5; b=7; ((a < b)) 會(huì)得到   0 (true) 的返回值。
常見的用于 (( )) 的測試符號有如下這些:
<:小于
>:大于
<=:小于或等于
>=:大于或等于
==:等于
!=:不等于

posted on 2011-01-06 09:55 大龍 閱讀(939) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国内自拍| 黄色日韩网站| 欧美在线观看一区二区| 久久亚洲综合| 一道本一区二区| 久久在线91| 亚洲第一精品影视| 亚洲电影免费在线观看| 亚洲黄色三级| 亚洲国产影院| 欧美高清在线精品一区| 亚洲人体一区| 国产精品三区www17con| 99这里只有精品| 久久成人免费网| 亚洲高清一二三区| 欧美大片免费久久精品三p | 欧美三区在线观看| 夜夜嗨av一区二区三区免费区| 一区二区三区你懂的| 欧美电影在线观看| 亚洲免费视频成人| 国产精品一区二区在线观看| 欧美三级午夜理伦三级中文幕 | 亚洲天堂偷拍| 久久久久久综合| 国产精品日日做人人爱| 136国产福利精品导航网址应用| 亚洲专区在线| 亚洲国产欧美日韩精品| 亚洲一区免费网站| 欧美偷拍另类| 亚洲免费观看高清完整版在线观看熊 | 亚洲精品一区二区三区婷婷月| 国产精品久久综合| 亚洲激情精品| 欧美日韩你懂的| 亚洲欧美国产视频| 久久蜜桃资源一区二区老牛 | 亚洲欧美日韩国产中文在线| 欧美在线播放| 久久福利一区| 欧美激情成人在线| 亚洲男人的天堂在线| 国产精品免费网站在线观看| 一区二区三区精品在线| 一本色道久久88亚洲综合88| 欧美另类专区| 亚洲综合色自拍一区| 9色国产精品| 国产伦精品一区二区三区| 久久久久久久综合| 美国十次了思思久久精品导航| 亚洲缚视频在线观看| 亚洲国产综合在线| 欧美日韩理论| 午夜国产一区| 美女91精品| 久久av一区二区三区| 男人的天堂亚洲在线| 一本色道久久加勒比精品 | 欧美日韩网址| 欧美一区二粉嫩精品国产一线天| 一个人看的www久久| 国产欧美日韩亚州综合| 亚洲黄网站在线观看| 好吊色欧美一区二区三区视频| 最新日韩在线| 在线观看视频一区| 亚洲欧美日韩视频二区| 亚洲美女av电影| 欧美激情亚洲一区| 国产精品女人毛片| 亚洲国产成人午夜在线一区| 国产精品在线看| 亚洲视频一区二区| 亚洲一本视频| 久久超碰97中文字幕| 欧美日本中文字幕| 亚洲精品一区二区三区福利| 亚洲人成77777在线观看网| 久久久一本精品99久久精品66| 欧美一级理论片| 国内精品久久久久久| 久久国产精品一区二区三区| 久久精品中文字幕一区二区三区 | 一本色道久久精品| 在线中文字幕一区| 国产精品久久久久久久9999 | 亚洲精品在线免费观看视频| 欧美亚洲系列| 欧美人交a欧美精品| 在线视频欧美日韩精品| 欧美在线观看网站| 精品福利电影| 欧美三区在线| 老牛国产精品一区的观看方式| 91久久在线播放| 久久超碰97人人做人人爱| 在线观看视频免费一区二区三区| 欧美高清视频免费观看| 欧美第一黄色网| 亚洲图色在线| 亚洲国产精品va在看黑人| 欧美日韩国产精品| 久久激情中文| 亚洲欧美激情在线视频| 国产热re99久久6国产精品| 久久一本综合频道| 国产女主播在线一区二区| 欧美激情亚洲精品| 久久国产欧美精品| 亚洲欧洲av一区二区| 一区二区三区四区五区精品| 亚洲第一页在线| 久久综合久久88| 久久久久久久综合色一本| 午夜视黄欧洲亚洲| 亚洲图片欧美日产| 宅男66日本亚洲欧美视频| 在线免费不卡视频| 樱桃国产成人精品视频| 好吊妞这里只有精品| 国内自拍亚洲| 亚洲第一视频网站| 99视频在线观看一区三区| 日韩亚洲欧美中文三级| 中文成人激情娱乐网| 亚洲欧美另类在线观看| 欧美一区三区三区高中清蜜桃| 久久久精品久久久久| 蜜桃av久久久亚洲精品| 欧美激情精品久久久久久免费印度 | 免费久久精品视频| 欧美日韩免费一区二区三区视频 | 国产一区99| 亚洲韩国一区二区三区| 一本色道久久精品| 久久久久一区二区三区四区| 欧美激情精品久久久久久黑人| 亚洲欧洲日韩综合二区| 亚洲欧美综合国产精品一区| 久久夜色精品国产欧美乱| 亚洲电影毛片| 亚洲一区免费看| 欧美激情综合色综合啪啪| 欧美午夜a级限制福利片| 国产真实乱子伦精品视频| 亚洲男人影院| 亚洲国产影院| 久久精品成人欧美大片古装| 欧美三级乱码| 亚洲视频中文字幕| 亚洲国产婷婷香蕉久久久久久| 黄色成人在线免费| 亚洲在线视频网站| 一本高清dvd不卡在线观看| 理论片一区二区在线| 伊人久久久大香线蕉综合直播 | 亚洲精品一区二| 久久亚洲午夜电影| 久久成年人视频| 亚洲国产精品电影在线观看| 蜜桃精品久久久久久久免费影院| 久久久精品国产99久久精品芒果| 国产精品网站在线观看| 久久9热精品视频| 久久久久久久久久久一区| 亚洲国产欧美日韩| 亚洲国产一区二区精品专区| 午夜亚洲福利在线老司机| 亚洲一区免费网站| 在线观看精品视频| 最新国产精品拍自在线播放| 国产精品盗摄久久久| 亚洲欧美国产va在线影院| 欧美在线观看一区| 一区二区电影免费观看| 欧美在线一区二区三区| 亚洲特色特黄| 蜜桃av一区| 久久久激情视频| 欧美日韩国产经典色站一区二区三区| 性欧美暴力猛交69hd| 免费一级欧美在线大片| 欧美另类综合| 亚洲综合电影| 久久精品国产成人| 亚洲一区二区三区免费视频| 久久婷婷国产综合尤物精品| 亚洲一区二区三区在线观看视频 | 久久精品国产一区二区电影| 亚洲精品一区二区在线观看| 亚洲欧美日韩中文在线制服| 亚洲少妇一区| 国产精品一区二区久久精品| 亚洲国内精品在线| 制服丝袜激情欧洲亚洲| 欧美日韩日日骚| 亚洲永久免费观看|