Portál AbcLinuxu, 13. května 2025 20:26
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.