Solusi lain untuk masalah di atas adalah mengatur setiap string ke variabel, panggil fungsi dengan variabel yang ditandai oleh tanda dolar literal \$. Kemudian dalam fungsi gunakan evaluntuk membaca variabel dan output seperti yang diharapkan.
#!/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
Outputnya adalah:
string1 = firstString
string2 = second string with spaces
string3 = thirdString
Dalam mencoba memecahkan masalah yang mirip dengan ini, saya mengalami masalah UNIX berpikir variabel saya dibatasi oleh ruang. Saya mencoba untuk melewatkan string yang dibatasi pipa ke fungsi yang digunakan awkuntuk mengatur serangkaian variabel yang nantinya digunakan untuk membuat laporan. Saya awalnya mencoba solusi yang diposting oleh ghostdog74 tetapi tidak bisa berfungsi karena tidak semua parameter saya diteruskan dalam tanda kutip. Setelah menambahkan tanda kutip ganda untuk setiap parameter kemudian mulai berfungsi seperti yang diharapkan.
Di bawah ini adalah status sebelum kode saya dan berfungsi penuh setelah status.
Sebelum - Kode Tidak Berfungsi
#!/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
Setelah - Kode Berfungsi
#!/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