另一種解決方案是在每個字符串設定爲一個變量,通話帶有由字面美元符號\$
表示的變量的函數。然後在函數中使用eval
按預期讀取變量和輸出。
#!/usr/bin/ksh
myFunction()
{
eval string1="$1"
eval string2="$2"
eval string3="$3"
echo "string1 = ${string1}"
echo "string2 = ${string2}"
echo "string3 = ${string3}"
}
var1="firstString"
var2="second string with spaces"
var3="thirdString"
myFunction "\${var1}" "\${var2}" "\${var3}"
exit 0
輸出則是:
string1 = firstString
string2 = second string with spaces
string3 = thirdString
在試圖解決一個類似的問題這一點,我也陷入了UNIX的思考我的變量空間delimeted問題。我試圖通過使用awk
來設置一系列後來用於創建報告的變量來將管道分隔字符串傳遞給函數。我最初嘗試了由ghostdog74發佈的解決方案,但無法讓它工作,因爲並非所有的參數都被引用。在爲每個參數添加雙引號後,它開始按預期工作。
下面是我的代碼之前的狀態,並在狀態之後完全運作。
前 - 未正常運行的代碼
#!/usr/bin/ksh
#*******************************************************************************
# Setup Function To Extract Each Field For The Error Report
#*******************************************************************************
getField(){
detailedString="$1"
fieldNumber=$2
# Retrieves Column ${fieldNumber} From The Pipe Delimited ${detailedString}
# And Strips Leading And Trailing Spaces
echo ${detailedString} | awk -F '|' -v VAR=${fieldNumber} '{ print $VAR }' | sed 's/^[ \t]*//;s/[ \t]*$//'
}
while read LINE
do
var1="$LINE"
# Below Does Not Work Since There Are Not Quotes Around The 3
iputId=$(getField "${var1}" 3)
done<${someFile}
exit 0
之後 - 功能代碼
#!/usr/bin/ksh
#*******************************************************************************
# Setup Function To Extract Each Field For The Report
#*******************************************************************************
getField(){
detailedString="$1"
fieldNumber=$2
# Retrieves Column ${fieldNumber} From The Pipe Delimited ${detailedString}
# And Strips Leading And Trailing Spaces
echo ${detailedString} | awk -F '|' -v VAR=${fieldNumber} '{ print $VAR }' | sed 's/^[ \t]*//;s/[ \t]*$//'
}
while read LINE
do
var1="$LINE"
# Below Now Works As There Are Quotes Around The 3
iputId=$(getField "${var1}" "3")
done<${someFile}
exit 0
對我的作品時,空間分隔arguements ......我用充滿語法雖然功能」功能BLA( ){echo $ 1; }「,不能確定它是否爲一個班輪,不知道它有什麼不同。什麼版本的bash? – Eugene 2009-12-30 23:28:11
嘗試'echo」$ @「'或'for i in」$ @「; echo $ i; done'因爲使用正確引用的包含空格的參數,這在'位置參數「部分下的所有'bash'文檔中都清楚地提到了 – Samveen 2013-06-14 07:06:09
我有一個類似的問題,試圖傳遞一個帶引號的字符串作爲參數,字符串被識別爲參數的一部分Samveen建議將$ 1更改爲$ @爲我工作注意,我只向函數傳遞了一個參數,但如果我使用for語句傳遞的更多, – 2014-04-20 08:01:57