當前位置:首頁 » 編程軟體 » shell腳本字元串連接

shell腳本字元串連接

發布時間: 2023-09-05 08:01:59

1. linux shell 字元串拼接方法

CROSS_COMPILE=arm-openwrt-linux-muslgnueabi-

echo $CROSS_COMPILE

方法1:

    test1=$(echo $CROSS_COMPILE)gcc

    echo $test1

方法2:

    test2=${CROSS_COMPILE}gccabc

    echo $test2

2. shell字元串拼接

字元串最好放到雙引號中,防止中間有空格,如name中就可能存在空格。

改為:
total="${name}""${email}""${other}"
或者 total="$name""$email""$other"

3. Shell腳本:${...}在字元串中的多種用法

1、${var}

限定變數。

如果一個變數名A是另一個變數名AB的前部分,那麼,如果要在AB相連時,要得到A的值,就必須使用${var}限定。

如果變數名不會產生歧義時(即獨立的變數名),${var}與$var沒有任何區別。

var="hello"

var_01="hello01"

echo  $var $var_01 ${var}_01

>>> hello hello01 hello_01

2、${#var}

得到變數var的長度

var="hello"

echo ${#var}

>>> 5

3、${var#}

刪除變數首部的字元(串),

"#"後面的可以是字面串,也可以是正則表達式(惰性匹配)。

var="hello"

echo ${var#he}

>>> llo

var="/res_pos/path/from/something"

echo ${var#/}

>>> res_pos/path/from/something    # 刪除第一個"/"

echo ${var#/*/}

>>> path/from/something  # 刪除首部匹配"/*/"的串,即"/res_pos/"

4、${var##}

刪除變數首部的字元(串),

只是,當使用2個"##"時,匹配是貪婪的(貪婪匹配,也就是盡可能多的匹配)。

echo ${var##/*/}

>>> something  # 刪除首部匹配"/*/"的串,即"/res_pos/path/from/"。

5、${var%}

刪除變數尾部的字元(串),

"%"後面的可以是字面串,也可以是正則表達式(惰性匹配)。

var="hello"

echo ${var%llo}

>>> he

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~/res_pos/path/from    # 刪除尾部的"/something"

6、${var%%}

刪除變數尾部的字元(串),

只是,當使用2個"%%"時,匹配是貪婪的(對應於第4條)

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~    # 刪除第一個的"/"後的所有所有內容(包括"/"),貪婪匹配中,"/*"就是"/"後的所有字元串

7、${var::}

python的切片概念相似,取變數var的起始索引,

指定長度的子串(${var:索引:長度})。

var="~/res_pos/path/from/something"

echo ${var:0:5}

>>> ~/res

echo ${var:1:5}

>>> /res_      # 可見,字元串的索引是從0開始的

echo ${var::5}

>>> ~/res      # 省略"索引",默認為從0開始

echo ${var:1:}

>>>              # 省略"長度",默認長度為0,所以輸出為空

8、${var//}

字元串替換。

將var中的字元串A替換成字元串B(${var/A/B})。

var="hello world"

echo ${var/hello/hi}

>>> hi world      # 字元串"hello"替換成了"hi"

echo ${var/l/X}

>>> heXlo world  # 第一個"l"替換成了"X"

9、${var///}

字元串替換,

與第8點相同,只不過,現在是將所有出現的串A替換成串B(${var//A/B})。

var="hello world"

echo ${var//l/X}

>>> heXXo worXd  # 所有的"l"都替換成了"X"

10、${var/#/}

替換字元串首部的串A為串B,

(${var/#A/B}),與第8點不同的是,這里只替換首部的串A。

var="hello world. hello baby."

echo ${var//h/H}

>>> Hello world. Hello baby.    # 將所有"h"替換成了"H"

echo ${var/#h/H}

>>> Hello world. hello baby.    # 將首部的"h"替換成了"H"

echo ${var/e/E}

>>> hEllo world. hello baby.    # 將第一個出現的"e"替換成了"E"

echo ${var/#e/E}

>>> hello world. hello baby.    # 首字元不是"e",所以沒有進行任何替換,原樣輸出。

11、${var/%/}

替換字元串尾部的串A為串B,

(${var/%A/B}),與第10點相似,只是這是處理的是字元串尾。

var="hello hello"

echo ${var/%o/END}

>>> hello hellEND    # 將尾部的字元"o",替換成了"END"。

4. hell 如何在bash腳本中連接兩個字元串變數

bash在一個腳本里引用另一個腳本定義的變數有3種方法:

  • fork(/directory/script.sh)

    fork是最普通的,就是直接在腳本裡面用/directory/script.sh來調用script.sh這個腳本.

    運行的時候開一個sub-shell執行調用的腳本,sub-shell執行的時候,parent-shell還在。

    sub-shell執行完畢後返回parent-shell.sub-shell從parent-shell繼承環境變數.但是sub-shell中的環境變數不會帶回parent-shell

  • exec(exec/directory/script.sh)

    exec與fork不同,不需要新開一個sub-shell來執行被調用的腳本.被調用的腳本與父腳本在同一個shell內執行。但是使用exec調用一個新腳本以後,父腳本中exec行之後的內容就不會再執行了。這是exec和source的區別

  • source(source/directory/script.sh)

    與fork的區別是不新開一個sub-shell來執行被調用的腳本,而是在同一個shell中執行.所以被調用的腳本中聲明的變數和環境變數,都可以在主腳本中得到和使用.

  • 可以通過下面這兩個腳本來體會三種調用方式的不同:

    1.sh

    #!/bin/bash

    A=B

    echo"PIDfor1.shbeforeexec/source/fork:$$"

    exportA

    echo"1.sh:$Ais$A"

    case$1in

    exec)

    echo"usingexec…"

    exec./2.sh;;

    source)

    echo"usingsource…"

    ../2.sh;;

    *)

    echo"usingforkbydefault…"

    ./2.sh;;

    esac

    echo"PIDfor1.shafterexec/source/fork:$$"

    echo"1.sh:$Ais$A"

    2.sh

    #!/bin/bash

    echo"PIDfor2.sh:$$"

    echo"2.shget$A=$Afrom1.sh"

    A=C

    exportA

    echo"2.sh:$Ais$A"

    執行情況:

    $./1.sh

    PIDfor1.shbeforeexec/source/fork:5845364

    1.sh:$AisB

    usingforkbydefault…

    PIDfor2.sh:5242940

    2.shget$A=Bfrom1.sh

    2.sh:$AisC

    PIDfor1.shafterexec/source/fork:5845364

    1.sh:$AisB

    $./1.shexec

    PIDfor1.shbeforeexec/source/fork:5562668

    1.sh:$AisB

    usingexec…

    PIDfor2.sh:5562668

    2.shget$A=Bfrom1.sh

    2.sh:$AisC

    $./1.shsource

    PIDfor1.shbeforeexec/source/fork:5156894

    1.sh:$AisB

    usingsource…

    PIDfor2.sh:5156894

    2.shget$A=Bfrom1.sh

    2.sh:$AisC

    PIDfor1.shafterexec/source/fork:5156894

    1.sh:$AisC

    $

5. ubuntu shell腳本文件連接字元串問題

((retnum=$RANDOM%max+min))

(( ))這種會新建shell運行,結果只在新建shell中有效,執行完畢回到原shell中,變數retnum的值是帶不過來的,直接丟失。
改為:
retnum=$((RANDOM%max+min))
這樣,返回值能保留在當前shell中。
$(( ))是bash中用於數學運算的特有符號。

6. linux中用shell時奇怪的字元串拼接和時間計算問題

testt=$(date +%Y-%m-%d)
date2="14/08/12"
test=20
testtt="${test}${date2}"
time1=$(date +%s -d "$testt" )
time2=$(date +%s -d "$testtt" )
time=$(($time1-$time2))
echo $time

改成引號,去掉括弧!!

7. 請教shell腳本里如何進行字元串匹配

比如說傳入的參數是str
tmpstr=`echo &str|awk '{print substr($0,length($0)-1),2}'信寬 #取滑悔亮最後兩位

if [ "$tmpstr" == "aa" ];then
......
elif [ "$tmpstr" == "前御bb" ]; then
......
fi

熱點內容
vmware共享文件夾centos 發布:2024-11-20 02:20:06 瀏覽:272
王者安卓9區叫什麼名字 發布:2024-11-20 02:06:32 瀏覽:989
編程倉 發布:2024-11-20 02:01:29 瀏覽:718
英國訪問簽證流程 發布:2024-11-20 01:55:13 瀏覽:540
mac開機問號文件夾原因 發布:2024-11-20 01:46:00 瀏覽:414
演算法統宗一百饅頭 發布:2024-11-20 01:44:01 瀏覽:299
育碧用的什麼伺服器 發布:2024-11-20 01:27:05 瀏覽:750
java去除字元串空格 發布:2024-11-20 01:27:04 瀏覽:697
python簡易代碼 發布:2024-11-20 01:17:41 瀏覽:904
光遇安卓八月三號是什麼季節 發布:2024-11-20 01:10:20 瀏覽:306