目錄
一、傳遞給函式的某個引數含有空格
1.傳遞的帶空格的引數是最後乙個引數
2.傳遞的帶空格的引數不是最後乙個引數
二、傳遞給shell指令碼的引數帶有空格
昨天一同事遇到乙個問題,往函式中傳遞的乙個引數是乙個sql語句時,函式裡只取了這個sql的第乙個單詞,他的寫法大概類似這樣:
test_param()
where_condition=`echo "where a=b;"`
echo "where_condition:"$where_condition
test_param a $where_condition
可以看到函式中只取了該引數的第乙個單詞。
這是因為函式的引數傳遞使用的是位置引數,且預設就是空格來間隔各個位置上的引數,所以他這種寫法第二個引數的值就成了"where" 。下面總結一下我想到的解決辦法:
這種情況解決辦法比較多,下面分別總結下:
方法一:傳遞引數時將帶上引號,引號內的所有內容都將作為乙個引數,如果該引數中沒有變數,單引號雙引號都可以;有變數的話就用雙引號。
test_param()
#第二個引數傳遞引數時帶上引號
where_condition=`echo "where a=b;"`
echo "where_condition:"$where_condition
test_param a "$where_condition"
測試結果:
方法二:不使用該引數,而是將其對應的變數直接在函式中使用
test_param()
#呼叫函式時不傳遞該引數,而是直接在函式中使用變數
where_condition=`echo "where a=b;"`
echo "where_condition:"$where_condition
test_param a
方法三:使用$*或者$@傳遞該引數,會以乙個單字串顯示所有傳遞的引數。不同之處在於$*會把所有包含的位置引數當成乙個整體,而$@會把所有位置引數當成單獨的字段(相當於乙個列表)。本例中它們的用法一樣。
test_param()
`echo "p2:"$p2
}where_condition="where a=b;"
echo "where_condition:"$where_condition
test_param a $where_condition
test_param()
echo "p2:"$p2
}where_condition="where a=b;"
echo "where_condition:"$where_condition
test_param a $where_condition
以上**的測試結果都是一樣的,就不一一列出來了。
當該引數不是最後乙個引數時,方法一跟方法二無需更改,方法三則需要明確知道該引數中含有幾個空格才能正確使用,不然則不適用。比如,如果是第二個引數,該引數中含有兩個空格可以寫成:$。
我們來簡單模擬一下這種情況。
p1=$1
p2=$2
echo "p2:"$p2
呼叫時如果直接傳也是只能取到該引數的第乙個單詞。
使用方法一加上引號試試,引數獲取正確:
因為是指令碼呼叫,沒辦法使用第二種方式傳遞變數。
試一下第三種方法:
p1=$1
p2=$
echo "p2:"$p2
雖然沒有加引號,仍然可以正常使用。
也就是說,傳遞給shell指令碼的引數帶有空格時可以使用方法一和方法三。
linux shell 引數傳遞
在shell程式設計時.可以使用引數。shell有位置引數和內部引數 1.位置引數 由系統提供的引數稱為位置引數。位置引數的值可以用 n得到,n是乙個數字,如果為1,即 1.類似c語言中的陣列,linux會把輸入的命令字串分段並給每段進行標號,標號從0開始。第0號為程式名字,從1開始就表示傳遞給程式...
Linux shell傳遞引數
在執行 shell 指令碼時,向指令碼傳遞引數,指令碼內獲取引數的格式為 n。n 代表乙個數字,1 為執行指令碼的第乙個引數,2 為執行指令碼的第二個引數,以此類推 例項以下例項我們向指令碼傳遞三個引數,並分別輸出,其中 0 為執行的檔名 bin bash echo shell 傳遞引數例項!ech...
linux shell 傳遞引數
在執行shell指令碼時可以傳遞引數 指令碼獲取引數的格式為 0 1 2 其中 1 為傳遞的第乙個引數 而 0 接受的是.test.sh 這個東西 例 bin bash echo 1 0echo 2 1echo 3 2執行結果 注意 大家可以看到我執行時後面傳了兩個引數 11 22 但是接收時 0接...