\$
วิธีการแก้ปัญหาดังกล่าวก็คือการตั้งค่าแต่ละสายให้กับตัวแปรเรียกใช้ฟังก์ชันที่มีตัวแปรแทนด้วยเครื่องหมายดอลลาร์อักษร จากนั้นในฟังก์ชั่นใช้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 โดยที่ตัวแปรของฉันถูกลบพื้นที่ ฉันพยายามส่งสตริงที่คั่นด้วยไพพ์ไปยังฟังก์ชันที่ใช้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