亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

shell中的大括號,小括號語法分別概述 -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.ishadingyu.com - 電腦資料】

   

    1.shell中的大括號和小括號

    1.${var}

    2.$(cmd)

    3.() 和 {}

    4.${var:-string}, ${var:+string},

    ${var:=string}, ${var:?string}

    5.$((exp))

    6.$(var%pattern), $(var%%pattern),

    $(var#pattern), $(var##pattern)

    現(xiàn)在分述如下:

    1.${var}是shell中的原形變量,我們常見的形式是

    $var

    如:

    $ var=test

    $ echo $var

    test

    但是這樣不能在變量后隨意添加字符

    如:

    $varAA

    就會出錯(cuò)

    這時(shí),可以用原形${var}AA

    testAA

    這個(gè)特性可以利用來批量修該后綴名

    文件為:rename.sh

    #! /bin/bash

    extension=$1

    for filename in `find . -type f`

    do

    mv $filename ${filename}.$extension

    done

    使用 $ ./rename.sh c可把全部文件修改為.c文件

    2.$(cmd)是命令替換

    如:

    $ ls

    d e f

    $ echo $(ls)

    d e f

    這個(gè)應(yīng)該這樣理解,先是執(zhí)行$(ls),這個(gè)的標(biāo)準(zhǔn)輸出來

    替換$(ls)的位置,作為echo 的參數(shù),即echo d e f

    注:這個(gè)和``這個(gè)是一致的,看個(gè)人習(xí)慣了

    有一點(diǎn)是只有標(biāo)準(zhǔn)輸出才能被替換,錯(cuò)誤輸出不能被替換

    3.() 和 {}

    這兩個(gè)都是對一串命令的執(zhí)行,但有些區(qū)別

    1.()只是對一串命令重新開一個(gè)子進(jìn)程進(jìn)行執(zhí)行

    {}是在當(dāng)前進(jìn)程執(zhí)行

    2.()和{}內(nèi)的命令都是以;隔開

    ()最后一個(gè)命令可以不用分號;

    {}最后一個(gè)分號需要

    3.()第一個(gè)命令不需要和括號間有空格

    {}第一個(gè)命令和左邊的括號間有空格

    對于1:

    $ var=10

    $ (var=20;echo $var)

    20

    $ echo $var

    10

    說明()中執(zhí)行的語句沒有調(diào)用當(dāng)前的變量,所以是在子進(jìn)程中實(shí)現(xiàn)

    $ var=30

    $ { var=40;echo $var } #第一個(gè)要有空格哦

    40

    $ echo $var

    40

    說明var被修改了,是在同一個(gè)進(jìn)程中實(shí)現(xiàn)

    4.${var:-string}, ${var:+string},

    ${var:=string}, ${var:?string}

    A,${var:-string}和${var:=string}

    若變量var為空,則用在命令行中用string來替換${var:-string},否則變量var不為空時(shí),則用變量var的值來替換${var:-string}

    如:

    $ echo newvar

    $ echo ${newvar:-a}

    a

    $ echo newvar ###變量newvar的值仍然是空,但上一命令行中${newvar:-a}被替換成了a

    $ newvar=b

    $ echo ${newvar:-a} ###變量newvar的值不為空時(shí),此命令行中的${newvar:-b}被替換為$newvar,即b

    b

    $

    對于${var:=string}的替換規(guī)則和${var:-string}是一樣的,所不同之處是${var:=string}若var為空時(shí),用string替換${var:=string}的同時(shí),把string賦給變量var:

    $ echo newvar

    $ echo ${newvar:=a}

    a

    $ echo newvar ###變量newvar被賦值為a,同時(shí)${newvar:=a}被替換成a

    a

    $ echo ${newvar:=b} ###變量newvar不為空(其值已被賦為a),則${newvar:=b}被替換為newvar的值(即b)

    a

    $ echo $newvar

    a

    ${var:=string}很常用的一種用法是,判斷某個(gè)變量是否賦值,沒有的話則給它賦上一個(gè)默認(rèn)值,

shell中的大括號,小括號語法分別概述

,

電腦資料

shell中的大括號,小括號語法分別概述》(http://www.ishadingyu.com)。

    如設(shè)置默認(rèn)的編輯器:

    PHP 代碼:

    echo You use editor: ${EDITOR:=/bin/vi}

    B,${var:+string}

    ${var:+string}的替換規(guī)則和上面的相反,即只有當(dāng)var不是空的時(shí)候才替換成string,若var為空時(shí)則不替換或者說是替換成變量 var的值,即空值。(因?yàn)樽兞縱ar此時(shí)為空,所以這兩種說法是等價(jià)的)

    $ echo $newvar

    a

    $ echo ${newvar:+b}

    b

    $ echo $newvar

    a

    $ newvar=

    $ echo ${newvar:+b}

    $

    C,${var:?string}

    替換規(guī)則為:若變量var不為空,則用變量var的值來替換${var:?string};若變量var為空,則把string輸出到標(biāo)準(zhǔn)錯(cuò)誤中,并從腳本中退出。我們可利用此特性來檢查是否設(shè)置了變量的值。

    $ newvar=

    $ echo ${newvar:?沒有設(shè)置newvar的值}

    bash: newvar: 沒有設(shè)置newvar的值

    $ newvar=a

    $ echo ${newvar:?沒有設(shè)置newvar的值}

    a

    $

    補(bǔ)充擴(kuò)展:在上面這五種替換結(jié)構(gòu)中string不一定是常值的,可用另外一個(gè)變量的值或是一種命令的輸出。

    $ echo ${var:-`date`}

    日 3月 6 02:10:39 CST 2005

    $ echo ${var:-$(date)}

    日 3月 6 02:11:46 CST 2005

    $ a=test

    $ echo ${var:-$a}

    test

    $

    5.POSIX標(biāo)準(zhǔn)的擴(kuò)展計(jì)算:$((exp))

    這種計(jì)算是符合C語言的運(yùn)算符,也就是說只要符合C的運(yùn)算符都可用在$((exp)),甚至是三目運(yùn)算符。

    注意:這種擴(kuò)展計(jì)算是整數(shù)型的計(jì)算,不支持浮點(diǎn)型.若是邏輯判斷,表達(dá)式exp為真則為1,假則為0。

    $ echo $((3+2))

    5

    $ echo $((3>2))

    1

    $ echo $((25<3 ? 2:3))

    3

    $ echo $var

    $ echo $((var=2+3))

    5

    $ echo $var

    5

    $ echo $((var++))

    5

    $ echo $var

    6

    $

    好了,上面的例子足夠了,這也表明了這種擴(kuò)展運(yùn)算是很強(qiáng)大的。

    6.四種模式匹配替換結(jié)構(gòu):${var%pattern},${var%%pattern},${var#pattern},${var##pattern}

    這四種結(jié)構(gòu)的意義是:${var%pattern}和${var%%pattern}表示從最右邊(即結(jié)尾)匹配的,${var#pattern} 和${var##pattern}從最左邊(即開頭)匹配的。其中${var%pattern}和${var#pattern}是最短匹 配,${var%%pattern}和${var##pattern}是最長匹配。只有在pattern中使用了通配符才能有最長最短的匹配,否則沒有最 長最短匹配之分。

    結(jié)構(gòu)中的pattern支持通配符,*表示零個(gè)或多個(gè)任意字符,?表示零個(gè)或一個(gè)任意字符,[...]表示匹配中括號里面的字符,[!...]表示不匹配中括號里面的字符。

    $ var=aabbbccbbdbb

    $ echo ${var%b}

    aabbbccbbdb

    $ echo ${var%%b}

    aabbbccbbdb

    $ echo ${var#a}

    abbbccbbdbb

    $ echo ${var##a}

    abbbccbbdbb

    $ echo ${var%*b}

    aabbbccbbdb

    $ echo ${var%%*b}

    $ echo ${var#a*}

    abbbccbbdbb

    $ echo ${var##a*}

    $

最新文章