一级毛片免费不卡在线视频,国产日批视频免费在线观看,菠萝菠萝蜜在线视频免费视频,欧美日韩亚洲无线码在线观看,久久精品这里精品,国产成人综合手机在线播放,色噜噜狠狠狠综合曰曰曰,琪琪视频

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

電腦資料 時間:2019-01-01 我要投稿
【www.oriental01.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

    就會出錯

    這時,可以用原形${var}AA

    testAA

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

    文件為: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

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

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

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

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

    3.() 和 {}

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

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

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

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

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

    {}最后一個分號需要

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

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

    對于1:

    $ var=10

    $ (var=20;echo $var)

    20

    $ echo $var

    10

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

    $ var=30

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

    40

    $ echo $var

    40

    說明var被修改了,是在同一個進程中實現(xiàn)

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

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

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

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

    如:

    $ echo newvar

    $ echo ${newvar:-a}

    a

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

    $ newvar=b

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

    b

    $

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

    $ echo newvar

    $ echo ${newvar:=a}

    a

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

    a

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

    a

    $ echo $newvar

    a

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

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

電腦資料

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

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

    PHP 代碼:

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

    B,${var:+string}

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

    $ 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)錯誤中,并從腳本中退出。我們可利用此特性來檢查是否設(shè)置了變量的值。

    $ newvar=

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

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

    $ newvar=a

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

    a

    $

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

    $ 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)的擴展計算:$((exp))

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

    注意:這種擴展計算是整數(shù)型的計算,不支持浮點型.若是邏輯判斷,表達式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

    $

    好了,上面的例子足夠了,這也表明了這種擴展運算是很強大的。

    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支持通配符,*表示零個或多個任意字符,?表示零個或一個任意字符,[...]表示匹配中括號里面的字符,[!...]表示不匹配中括號里面的字符。

    $ 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*}

    $

最新文章