Une autre solution à la question ci-dessus est de définir chaque chaîne à une variable, appeler la fonction avec des variables notée par un littéral signe dollar \$
. Ensuite, en fonction de l'utilisation eval
de lire la variable et de sortie comme prévu.
#!/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
La sortie est alors:
string1 = firstString
string2 = second string with spaces
string3 = thirdString
En essayant de résoudre un problème semblable à cela, j'ai été en cours d'exécution dans la question de l'UNIX de la pensée de mes variables de l'espace delimeted. J'essayait de faire passer un tuyau de chaîne délimitée par une fonction à l'aide d' awk
pour définir une série de variables utilisées par la suite pour créer un rapport. J'ai d'abord essayé la solution posté par ghostdog74, mais ne pouvait pas le faire fonctionner car tous mes paramètres ont été transmis dans les citations. Après l'ajout de guillemets pour chaque paramètre, puis il a commencé à fonctionner comme prévu.
Ci-dessous est à l'avant que l'état de mon code et qui fonctionne parfaitement après l'etat.
Avant - Non Fonctionnement Du Code
#!/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
Après Le Fonctionnement Du Code
#!/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