위의 문제에 대한 또 다른 해결책은 각 문자열을 변수로 설정하고 리터럴 달러 기호로 표시된 변수로 함수를 호출하는 것입니다 \$
. 그런 다음 함수 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
이와 비슷한 문제를 해결하기 위해 유닉스 문제가 발생하여 변수가 공간을 차지한다고 생각했습니다. 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