欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

問題描述

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

代碼如下

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

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

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

原因分析

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

解決方案

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

代碼如下

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

測試結(jié)果

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

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

代碼如下

# 傳參腳本 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
#取第一個參數(shù)到的所有內(nèi)容(直到最后)
std_time=${@:1}
echo $std_time

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

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

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

拓展

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

傳遞給函數(shù)的某個參數(shù)含有空格,除了以上兩種方法之外,還可以有方法三:直接將對應(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

測試結(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?

使用方法三的測試結(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"

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

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

相關(guān)文章

  • linux常用命令之pip命令示例詳解

    linux常用命令之pip命令示例詳解

    本文介紹了 pip 命令的基本語法、常用選項和參數(shù),以及一些常見的使用示例,通過學(xué)習(xí)和掌握 pip 命令,你可以方便地管理和使用 Python 包,提高開發(fā)效率,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • Shell最多支持多少個參數(shù)?

    Shell最多支持多少個參數(shù)?

    這篇文章主要介紹了Shell最多支持多少個參數(shù)?本文是對Shell最多可以輸入多少個參數(shù)的一篇測試文章,需要的朋友可以參考下
    2014-10-10
  • 一個可交互的并發(fā)ping檢測腳本

    一個可交互的并發(fā)ping檢測腳本

    可交互的并發(fā)ping檢測腳本,供大家學(xué)習(xí)參考。重點& 跟wait,這樣“并發(fā)”的結(jié)果是輸出結(jié)果不是能按順序,后臺返回。如果需要再排序下
    2013-02-02
  • linux shell實現(xiàn)獲取用戶輸入指定范圍的單個字符的兩種方法

    linux shell實現(xiàn)獲取用戶輸入指定范圍的單個字符的兩種方法

    用shell實現(xiàn)的,要求獲取用戶輸一個字符a-zA-Z實現(xiàn)方法如下,需要的朋友可以參考下
    2013-03-03
  • Shell中獲取腳本所在目錄絕對路徑的方法

    Shell中獲取腳本所在目錄絕對路徑的方法

    這篇文章主要介紹了Shell中獲取腳本所在目錄絕對路徑的方法,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-01-01
  • C語言實現(xiàn)的ls命令源碼分享

    C語言實現(xiàn)的ls命令源碼分享

    這篇文章主要介紹了C語言實現(xiàn)的ls命令源碼分享,本文是學(xué)習(xí)apue的練手之作,需要的朋友可以參考下
    2014-09-09
  • Shell腳本實現(xiàn)分析apache日志中ip所在的地區(qū)

    Shell腳本實現(xiàn)分析apache日志中ip所在的地區(qū)

    這篇文章主要介紹了Shell腳本實現(xiàn)分析apache日志中ip所在的地區(qū),本文使用了一款nali工具實現(xiàn),需要的朋友可以參考下
    2014-12-12
  • Shell alias給命令設(shè)置別名的實現(xiàn)方法

    Shell alias給命令設(shè)置別名的實現(xiàn)方法

    這篇文章主要介紹了Shell alias給命令設(shè)置別名的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 自動生成linux網(wǎng)卡配置腳本分享

    自動生成linux網(wǎng)卡配置腳本分享

    這篇文章主要介紹了自動生成linux網(wǎng)卡配置的腳本,因為Linux虛擬機在復(fù)制時候網(wǎng)卡信息會更新,所以導(dǎo)致需要重新配置網(wǎng)卡。本腳本功能,第一次添加網(wǎng)卡后,啟動虛擬機,然后運行腳本(可以寫在啟動腳步中),然后根據(jù)ifconfig -a 的信息來創(chuàng)建ifcfg-ethX的配置文件或者修改對應(yīng)的ifcfg-ethX的mac
    2014-03-03
  • Linux命令每天必學(xué)之 useradd/adduser 新增用戶

    Linux命令每天必學(xué)之 useradd/adduser 新增用戶

    Linux下useradd或adduser命令用來建立用戶帳號和創(chuàng)建用戶的起始目錄,使用權(quán)限是超級用戶。接下來通過本文給大家介紹每天必學(xué)Linux命令之 useradd/adduser 新增用戶的相關(guān)知識,需要的朋友參考下吧
    2018-10-10

最新評論