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

大龍的博客

常用鏈接

統(tǒng)計

最新評論

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

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

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

用 $( ) 的理由:

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

2, 在多層次的復(fù)合替換中,` ` 須要額外的跳脫( \` )處理,而 $( ) 則比較直觀。例如:
這是錯的:
[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} 并沒有啥不一樣。
但是用 ${ } 會比較精確的界定變量名稱的范圍,比方說:
$ A=B
$ echo $AB
原本是打算先將 $A 的結(jié)果替換出來,然后再補一個 B 字母于其后,
但在命令行上,真正的結(jié)果卻是只會提換變量名稱為 AB 的值出來…
若使用 ${ } 就沒問題了:
$ echo ${A}B
BB

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

為了完整起見,我這里再用一些例子加以說明 ${ } 的一些特異功能:
假設(shè)我們定義了一個變量為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最后一條 / 及其左邊的字符串:my.file.txt
${file#*.}:拿掉第一個 .  及其左邊的字符串:file.txt
${file##*.}:拿掉最后一個 .  及其左邊的字符串:txt
${file%/*}:拿掉最后條 / 及其右邊的字符串:/dir1/dir2/dir3
${file%%/*}:拿掉第一條 / 及其右邊的字符串:(空值)
${file%.*}:拿掉最后一個 .  及其右邊的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一個 .  及其右邊的字符串:/dir1/dir2/dir3/my
記憶的方法為:
[list]# 是去掉左邊(在鑒盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑒盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個符號是最大匹配。[/list]
${file:0:5}:提取最左邊的 5 個字節(jié):/dir1
${file:5:5}:提取第 5 個字節(jié)右邊的連續(xù) 5 個字節(jié):/dir2

我們也可以對變量值里的字符串作替換:
${file/dir/path}:將第一個 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 作傳回值。(空值及非空值時不作處理) 
${file:-my.file.txt} :假如 $file 沒有設(shè)定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作處理)
${file+my.file.txt} :假如 $file 設(shè)為空值或非空值,均使用 my.file.txt 作傳回值。(沒設(shè)定時不作處理)
${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設(shè)定及空值時不作處理)
${file=my.file.txt} :若 $file 沒設(shè)定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理)
${file:=my.file.txt} :若 $file 沒設(shè)定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (非空值時不作處理)
${file?my.file.txt} :若 $file 沒設(shè)定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作處理)
${file:?my.file.txt} :若 $file 沒設(shè)定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理)

 

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

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

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

好了,最后為大家介紹 $(( )) 的用途吧:它是用來作整數(shù)運算的。
在 bash 中,$(( )) 的整數(shù)運算符號大致有這些:
+ - * / :分別為 "加、減、乘、除"。
% :余數(shù)運算
& | ^ !:分別為 "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 的結(jié)果

此外,$(( )) 還可作不同進位(如二進制、八進位、十六進制)作運算呢,只是,輸出結(jié)果皆為十進制而已:
echo $((16#2a)) 結(jié)果為 42 (16進位轉(zhuǎn)十進制)
以一個實用的例子來看看吧:
假如當(dāng)前的   umask 是 022 ,那么新建文件的權(quán)限即為:
$ 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 < b)) 會得到   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>
            亚洲欧洲一区| 亚洲国产日韩综合一区| 欧美一区精品| 亚洲欧美日本精品| 亚洲欧美日韩综合| 欧美一区二区在线| 久久久久久尹人网香蕉| 久久久亚洲高清| 欧美激情第五页| 欧美精品在线观看一区二区| 欧美日韩亚洲一区二| 国产精品久久久久久av下载红粉| 国产精品热久久久久夜色精品三区| 国产精品久久久久久五月尺| 国产亚洲一区在线| 亚洲精品极品| 性欧美办公室18xxxxhd| 蜜桃av久久久亚洲精品| 亚洲精品国产精品乱码不99按摩| 亚洲精品欧美极品| 欧美一级片一区| 欧美精品粉嫩高潮一区二区| 国产精品综合网站| 亚洲精品视频一区| 久久本道综合色狠狠五月| 亚洲大胆视频| 亚洲欧美成人精品| 欧美成人激情视频免费观看| 欧美性开放视频| 在线成人av.com| 亚洲在线一区二区三区| 欧美激情精品久久久| 午夜亚洲视频| 欧美网站在线| 日韩视频在线观看国产| 久久精品国产在热久久 | 欧美日韩美女在线| 伊人春色精品| 亚洲免费中文| 亚洲人成网站999久久久综合| 国产精品每日更新在线播放网址| 亚洲一区三区电影在线观看| 久久精品夜夜夜夜久久| 欧美午夜a级限制福利片| 1000部国产精品成人观看| 亚洲欧美怡红院| 亚洲三级色网| 免费成人在线视频网站| 国产综合在线看| 午夜精品久久久久久久久久久久久| 亚洲电影成人| 久久综合九色综合网站| 国产综合久久久久久| 性久久久久久| 亚洲天堂免费观看| 欧美三级网页| 亚洲在线观看视频网站| 99视频在线精品国自产拍免费观看 | 99热这里只有成人精品国产| 久久伊人免费视频| 一区福利视频| 老牛影视一区二区三区| 久久精品伊人| 亚洲电影毛片| 亚洲风情亚aⅴ在线发布| 噜噜爱69成人精品| 亚洲精品一区二区在线| 亚洲国产一区二区在线| 欧美激情一区二区三区不卡| 亚洲日本va午夜在线电影| 欧美韩日一区| 欧美激情综合色| 一本色道久久综合| 亚洲毛片av在线| 欧美性大战久久久久久久| 亚洲综合日本| 欧美一区国产二区| 亚洲国产精品传媒在线观看| 亚洲国产成人不卡| 欧美日韩裸体免费视频| 欧美一级视频一区二区| 久久国产综合精品| 亚洲精品久久久久久久久久久久久| 亚洲高清一区二| 国产精品第一页第二页第三页| 欧美在线免费观看视频| 久久亚洲国产精品日日av夜夜| 91久久精品日日躁夜夜躁欧美 | 亚洲国产成人久久综合一区| 欧美精品福利视频| 欧美一级成年大片在线观看| 久久婷婷久久一区二区三区| 亚洲精品一区二区三区四区高清| 夜夜嗨av一区二区三区网页| 国产视频在线观看一区| 欧美激情一区二区三区在线视频| 国产亚洲综合精品| 免费视频一区二区三区在线观看| 麻豆91精品91久久久的内涵| 亚洲免费久久| 亚洲在线视频观看| 亚洲日本精品国产第一区| 亚洲一区亚洲| 亚洲精品视频在线看| 亚洲欧美中文在线视频| 日韩视频在线免费| 久久精品免费看| 亚洲欧美制服另类日韩| 免费欧美网站| 久久久久久久999精品视频| 欧美日韩aaaaa| 欧美成人伊人久久综合网| 国产九九精品| 夜夜爽av福利精品导航| 亚洲人成在线影院| 久久免费黄色| 久久漫画官网| 国产精品美女午夜av| 亚洲黄色三级| 亚洲承认在线| 欧美专区亚洲专区| 亚洲欧美乱综合| 欧美日韩一区二区精品| 亚洲第一成人在线| 亚洲二区在线| 久久人人97超碰国产公开结果| 欧美专区亚洲专区| 国产精品自拍小视频| 中文在线一区| 亚洲一级黄色av| 欧美日韩国产专区| 99www免费人成精品| 夜夜精品视频| 欧美日本视频在线| 亚洲毛片在线观看.| 一区二区欧美在线| 欧美日韩国产综合视频在线观看| 亚洲茄子视频| 一区二区三区欧美在线| 欧美日韩精品免费| 在线亚洲精品福利网址导航| 亚洲一区二区精品| 国产精品久久久久久久免费软件| 一区二区三区欧美成人| 亚洲在线黄色| 国产婷婷一区二区| 久久精品欧美| 欧美激情精品久久久久久变态| 亚洲二区精品| 欧美交受高潮1| 一区二区三区鲁丝不卡| 欧美亚洲自偷自偷| 尤物99国产成人精品视频| 久久这里有精品15一区二区三区| 欧美成人精品| 一区二区三区蜜桃网| 国产精品久久久久久久久久免费| 亚洲图片欧洲图片av| 久久大综合网| 亚洲国产精品成人va在线观看| 欧美黄色一级视频| 亚洲一区二区影院| 老鸭窝91久久精品色噜噜导演| 亚洲国产成人不卡| 国产精品xxxxx| 欧美午夜电影网| 久久精品一区四区| 亚洲国产一区在线| 亚洲欧美在线一区| 国内自拍视频一区二区三区| 免费亚洲一区二区| 亚洲视频在线视频| 欧美成人自拍| 午夜欧美电影在线观看| 亚洲电影成人| 国产精品婷婷| 欧美成人一区在线| 欧美亚洲午夜视频在线观看| 亚洲国产日韩美| 久久av资源网站| 99成人精品| 激情亚洲网站| 国产精品久久激情| 欧美成人午夜剧场免费观看| 亚洲少妇自拍| 亚洲黄页视频免费观看| 久久精品国产亚洲一区二区| 99热精品在线观看| 一区二区三区中文在线观看| 欧美无砖砖区免费| 欧美激情麻豆| 蜜月aⅴ免费一区二区三区| 亚洲欧美日韩国产综合| 亚洲精品黄色| 亚洲国产成人久久综合| 麻豆精品在线视频| 久久亚洲春色中文字幕久久久| 午夜视频在线观看一区二区| 亚洲三级影院| 亚洲日本va午夜在线电影|