亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決linux?shell中傳遞包含空格的參數(shù)問題

 更新時(shí)間:2023年09月25日 15:24:41   作者:L_學(xué)無止境  
這篇文章主要介紹了如何解決linux?shell中傳遞包含空格的參數(shù)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

linux shell中傳遞包含空格的參數(shù)

昨天一同事遇到一個(gè)問題,往函數(shù)中傳遞的一個(gè)參數(shù)是一個(gè)sql語句時(shí),函數(shù)里只取了這個(gè)sql的第一個(gè)單詞,

他的寫法大概類似這樣:

test_param()
{
p1=$1
p2=$2
echo "p2:"$p2
}
where_condition=`echo "where a=b;"`
echo "where_condition:"$where_condition
test_param a $where_condition

可以看到函數(shù)中只取了該參數(shù)的第一個(gè)單詞。

這是因?yàn)楹瘮?shù)的參數(shù)傳遞使用的是位置參數(shù),且默認(rèn)就是空格來間隔各個(gè)位置上的參數(shù),所以他這種寫法第二個(gè)參數(shù)的值就成了"where" 。

下面總結(jié)一下我想到的解決辦法:

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

1.傳遞的帶空格的參數(shù)是最后一個(gè)參數(shù)

這種情況解決辦法比較多,下面分別總結(jié)下:

方法一:

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

test_param()
{
p1=$1
p2=$2
echo "p2:"$p2
}
#第二個(gè)參數(shù)傳遞參數(shù)時(shí)帶上引號
where_condition=`echo "where a=b;"`
echo "where_condition:"$where_condition
test_param a "$where_condition"

測試結(jié)果:

方法二:

不使用該參數(shù),而是將其對應(yīng)的變量直接在函數(shù)中使用

test_param()
{
p1=$1
p2=$where_condition
echo "p2:"$p2
}
#調(diào)用函數(shù)時(shí)不傳遞該參數(shù),而是直接在函數(shù)中使用變量
where_condition=`echo "where a=b;"`
echo "where_condition:"$where_condition
test_param a 

方法三:

使用$*或者$@傳遞該參數(shù),會以一個(gè)單字符串顯示所有傳遞的參數(shù)。

不同之處在于$*會把所有包含的位置參數(shù)當(dāng)成一個(gè)整體,而$@會把所有位置參數(shù)當(dāng)成單獨(dú)的字段(相當(dāng)于一個(gè)列表)。

本例中它們的用法一樣。

test_param()
{
p1=$1
#取第二個(gè)位置參數(shù)到最后的所有內(nèi)容
p2=`echo ${@:2}`
echo "p2:"$p2
}
where_condition="where a=b;"
echo "where_condition:"$where_condition
test_param a $where_condition
test_param()
{
p1=$1
#取第二個(gè)位置參數(shù)到最后的所有內(nèi)容
p2=${*:2}
echo "p2:"$p2
}
where_condition="where a=b;"
echo "where_condition:"$where_condition
test_param a $where_condition

以上代碼的測試結(jié)果都是一樣的,就不一一列出來了。 

2.傳遞的帶空格的參數(shù)不是最后一個(gè)參數(shù)

當(dāng)該參數(shù)不是最后一個(gè)參數(shù)時(shí),方法一跟方法二無需更改,方法三則需要明確知道該參數(shù)中含有幾個(gè)空格才能正確使用,不然則不適用。

比如,如果是第二個(gè)參數(shù),該參數(shù)中含有兩個(gè)空格可以寫成:${@:2:3}。

二、傳遞給shell腳本的參數(shù)帶有空格

我們來簡單模擬一下這種情況。

p1=$1
p2=$2
echo "p2:"$p2

調(diào)用時(shí)如果直接傳也是只能取到該參數(shù)的第一個(gè)單詞。

使用方法一加上引號試試,參數(shù)獲取正確:

因?yàn)槭悄_本調(diào)用,沒辦法使用第二種方式傳遞變量。 

試一下第三種方法:

p1=$1
p2=${*:2}
echo "p2:"$p2

雖然沒有加引號,仍然可以正常使用。

也就是說,傳遞給shell腳本的參數(shù)帶有空格時(shí)可以使用方法一和方法三。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論