Yukarıdaki soruna başka bir çözüm, her dizeyi bir değişkene ayarlamak, işlevi bir dolar işareti ile belirtilen değişkenlerle çağırmaktır \$
. Daha sonra işlevde eval
değişkeni okumak ve çıktıyı beklendiği gibi kullanın.
#!/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
Çıktı daha sonra:
string1 = firstString
string2 = second string with spaces
string3 = thirdString
Buna benzer bir sorunu çözmeye çalışırken, değişkenlerimin alanla sınırlı olduğunu düşünerek UNIX konusuna giriyordum. Daha awk
sonra rapor oluşturmak için kullanılan değişkenler bir dizi ayarlamak için kullanarak bir işleve bir boru ayrılmış dize geçmek çalışıyordu . Başlangıçta ghostdog74 tarafından gönderilen çözümü denedim ama tüm parametrelerim tırnak içinde geçmediği için işe yaramadı. Her parametreye çift tırnak ekledikten sonra beklendiği gibi çalışmaya başladı.
Aşağıda kodumun önceki durumu ve durumdan sonra tamamen çalışıyor.
Önce - Çalışmayan Kod
#!/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
Sonrası - İşleyen Kod
#!/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