Portál AbcLinuxu, 3. listopadu 2025 21:54
function foo ()
{
eval $1="$2"
}
foo "A" "aaaaa"
echo "$A" #aaaaa
foo "B" "bbbbb"
echo "$B" #bbbbb
Zdravim, hledam reseni s náhradou za eval, prej je nebezpecne, poradite?To je kec. Nebezpecni jsou akorat pitomci.
eval. Můžeš klidně udělat
declare -g $1="$2"když nechceš použít
eval, ale odolnější vůči neošetřeným argumentům to bude jen marginálně.
Vlastně používání počítačů je nebezpečné obecně a stěží ho lze doporučit.+1
bash$ bash --version GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)The -g option forces variables to be created or modified at the global scope, even when declare is executed in a shell function. It is ignored in all other cases.
MENU=("aaa|bbb"
"ccc|ddd"
"eee|fff")
rozdel_pole {
OLD_IFS=$IFS
IFS=$'|'
ARRAY=( $3 )
IFS=$OLD_IFS
ARRAY_0=$( echo ${ARRAY[0]} )
ARRAY_1=$( echo ${ARRAY[1]} )
declare $1
declare $2
$1="$ARRAY_0"
$2="$ARRAY_1"
}
rozdel_pole "PRVNI" "DRUHA" "${MENU[1]}"
echo $PRVNI $DRUHA
rozdel_pole "PETR" "PAVEL" "${MENU[2]}"
echo $PETR $PAVEL
/home/ucimse.sh: line 46: PRVNI=ccc: command not found
/home/ucimse.sh: line 47: DRUHA=ddd: command not found
/home/ucimse.sh: line 46: PETR=eee: command not found
/home/ucimse.sh: line 47: PAVEL=fff: command not found
nahraďte buď (varianta s eval) řádkydeclare $1 declare $2$1="$ARRAY_0" $2="$ARRAY_1"
eval $1="$ARRAY_0" eval $2="$ARRAY_1"nebo (varianta bez eval)
declare -g $1="$ARRAY_0" declare -g $2="$ARRAY_1"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.