最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本傳參中包含有空格的參數(shù)

 更新時(shí)間:2023年03月22日 16:39:02   作者:sodaloveer  
本文主要介紹了shell腳本傳參中包含有空格的參數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

問題描述

調(diào)用并傳參數(shù)給其他shell腳本,傳的參數(shù)帶有空格,被調(diào)用的shell腳本只取了這個(gè)參數(shù)的第一個(gè)單詞。

代碼如下

# 傳參腳本 test_pre.sh
[wqf@b1i10 test]$ cat test_pre.sh
binFilePath="/apps/test"
logpath="/apps/test"
std_time="2023-01-31 18:00:00"
sh $binFilePath/test.sh $std_time > $logpath/test_$(date +%Y%m%d%H%M).log 2>&1 &?

# 調(diào)用腳本 test.sh
[wqf@b1i10 test]$ cat test.sh
std_time=$1
echo $std_time

測(cè)試結(jié)果如下,可以看到只取了該參數(shù)的第一個(gè)單詞

[wqf@b1i10 test]$ cat test_202302061655.log
2023-01-31

原因分析

腳本的參數(shù)傳遞使用的是位置參數(shù),且默認(rèn)就是空格來間隔各個(gè)位置上的參數(shù),所以只取std_time前半個(gè)部分“2023-01-31”。

解決方案

方法一:傳遞參數(shù)時(shí)將帶上引號(hào),引號(hào)內(nèi)的所有內(nèi)容都將作為一個(gè)參數(shù),如果該參數(shù)中沒有變量,單引號(hào)雙引號(hào)都可以;有變量的話就用雙引號(hào)。

代碼如下

# 傳參腳本 test_pre.sh
[wqf@b1i10 test]$ cat test_pre.sh
binFilePath="/apps/test"
logpath="/apps/test"
std_time="2023-01-31 18:00:00"
sh $binFilePath/test.sh "$std_time" > $logpath/test_$(date +%Y%m%d%H%M).log 2>&1 &?

# 調(diào)用腳本 test.sh
[wqf@b1i10 test]$ cat test.sh
std_time=$1
echo $std_time

測(cè)試結(jié)果

[wqf@b1i10 test]$ cat test_202302061716.log
2023-01-31 18:00:00

方法二:使用 $* 或者 $@ 傳遞該參數(shù),會(huì)以一個(gè)單字符串顯示所有傳遞的參數(shù)。不同之外在于 $* 會(huì)把所有包含的位置參數(shù)當(dāng)成一個(gè)整體,而 $@ 會(huì)把所有位置參數(shù)當(dāng)成單獨(dú)的字段(相當(dāng)于一個(gè)列表)。 本例中它們的用法一樣。

代碼如下

# 傳參腳本 test_pre.sh
[wqf@b1i10 test]$ cat test_pre.sh
binFilePath="/apps/test"
logpath="/apps/test"
std_time="2023-01-31 18:00:00"
sh $binFilePath/test.sh $std_time > $logpath/test_$(date +%Y%m%d%H%M).log 2>&1 &?

# 調(diào)用腳本 test.sh
[wqf@b1i10 test]$ cat test.sh
#取第一個(gè)參數(shù)到的所有內(nèi)容(直到最后)
std_time=${@:1}
echo $std_time

# 調(diào)用腳本 test.sh
[wqf@b1i10 test]$ cat test.sh
#取第一個(gè)參數(shù)到的所有內(nèi)容(直到最后)
std_time=${*:1}
echo $std_time

以上代碼測(cè)試結(jié)果都是一樣的,不一一展示。

注意:假設(shè)要傳的參數(shù)中含有多個(gè)空格,需要標(biāo)明含有幾個(gè)空格才能正確使用。比如,如果是第二個(gè)參數(shù),該參數(shù)中含有兩個(gè)空格可以寫成:${@:2:3}

拓展

傳遞給函數(shù)的某個(gè)參數(shù)含有空格

傳遞給函數(shù)的某個(gè)參數(shù)含有空格,除了以上兩種方法之外,還可以有方法三:直接將對(duì)應(yīng)的變量在函數(shù)中使用,腳本調(diào)用,沒辦法使用這種方式傳遞變量。

假設(shè)函數(shù)腳本的代碼如下

[wqf@b1i10 ~]$cat test_1.sh
test_param(){
std_time=$1
echo "std_time:" $std_time
}

std_time="2023-01-31 18:00:00"
echo "std_time:" $std_time
test_param $std_time

測(cè)試結(jié)果

[wqf@b1i10 ~]$ sh test_1.sh
std_time: 2023-01-31 18:00:00
std_time: 2023-01-31

使用方法三的代碼如下:

[wqf@b1i10 ~]$cat test_1.sh
test_param(){
std_time=$std_time
echo "std_time:" $std_time
}

std_time="2023-01-31 18:00:00"
echo "std_time:" $std_time
test_param?

使用方法三的測(cè)試結(jié)果:

[wqf@b1i10 ~]$ sh test_1.sh
std_time: 2023-01-31 18:00:00
std_time: 2023-01-31 18:00:00

使用方法一的代碼如下:

[wqf@b1i10 ~]$cat test_1.sh
test_param(){
std_time=$1
echo "std_time:" $std_time
}

std_time="2023-01-31 18:00:00"
echo "std_time:" $std_time
test_param "$std_time"

使用方法二的代碼如下:

[wqf@b1i10 ~]$cat test_1.sh
test_param(){
std_time=${@:1}
echo "std_time:" $std_time
}

std_time="2023-01-31 18:00:00"
echo "std_time:" $std_time
test_param "$std_time"


[wqf@b1i10 ~]$cat test_1.sh
test_param(){
std_time=${*:1}
echo "std_time:" $std_time
}

std_time="2023-01-31 18:00:00"
echo "std_time:" $std_time
test_param "$std_time"

以上測(cè)試結(jié)果都是一致,不一一展示。

到此這篇關(guān)于shell腳本傳參中包含有空格的參數(shù)的文章就介紹到這了,更多相關(guān)shell傳遞帶空格的參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

隆子县| 青川县| 翼城县| 德化县| 长沙县| 安岳县| 融水| 石柱| 黑水县| 越西县| 望谟县| 天等县| 黎平县| 梁山县| 辛集市| 佛学| 兴文县| 尖扎县| 泸州市| 海门市| 焦作市| 化隆| 沿河| 凤庆县| 大关县| 玉山县| 芜湖县| 深泽县| 乌审旗| 德惠市| 城固县| 揭阳市| 磴口县| 孟州市| 比如县| 城市| 松溪县| 揭东县| 张家川| 大丰市| 霍邱县|