91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

shell腳本傳參中包含有空格的參數怎么解決

發布時間:2023-05-11 16:53:33 來源:億速云 閱讀:202 作者:iii 欄目:開發技術

本篇內容主要講解“shell腳本傳參中包含有空格的參數怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“shell腳本傳參中包含有空格的參數怎么解決”吧!

問題描述

調用并傳參數給其他shell腳本,傳的參數帶有空格,被調用的shell腳本只取了這個參數的第一個單詞。

代碼如下

# 傳參腳本 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 & 

# 調用腳本 test.sh
[wqf@b1i10 test]$ cat test.sh
std_time=$1
echo $std_time

測試結果如下,可以看到只取了該參數的第一個單詞

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

原因分析

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

解決方案

方法一:傳遞參數時將帶上引號,引號內的所有內容都將作為一個參數,如果該參數中沒有變量,單引號雙引號都可以;有變量的話就用雙引號。

代碼如下

# 傳參腳本 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 & 

# 調用腳本 test.sh
[wqf@b1i10 test]$ cat test.sh
std_time=$1
echo $std_time

測試結果

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

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

代碼如下

# 傳參腳本 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 & 

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

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

以上代碼測試結果都是一樣的,不一一展示。

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

拓展

傳遞給函數的某個參數含有空格

傳遞給函數的某個參數含有空格,除了以上兩種方法之外,還可以有方法三:直接將對應的變量在函數中使用,腳本調用,沒辦法使用這種方式傳遞變量。

假設函數腳本的代碼如下

[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 ~]$ 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

使用方法三的測試結果:

[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"

以上測試結果都是一致,不一一展示。

到此,相信大家對“shell腳本傳參中包含有空格的參數怎么解決”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

抚松县| 焦作市| 英山县| 望谟县| 北票市| 工布江达县| 康定县| 亳州市| 庄浪县| 肥城市| 蓝田县| 凤城市| 宁乡县| 绥德县| 略阳县| 贞丰县| 石楼县| 乌拉特后旗| 平阴县| 乐安县| 青田县| 五河县| 高安市| 新绛县| 宁德市| 乌拉特前旗| 哈密市| 科技| 西充县| 岳阳县| 友谊县| 邮箱| 汉川市| 吉林省| 永州市| 伊金霍洛旗| 武川县| 大田县| 高台县| 奈曼旗| 淮北市|