用其他东西替换eval

问题描述 投票:0回答:1

我正在尝试用其他东西替换我的代码中的eval。我目前的工作是:

#$1 command "command"
#$2 params "--source='Waiting b'"
fun_example(){
  eval java -Dfile.encoding="UTF-8" \  
  -Duser.language="en" -Dspring.profiles.active="x" -jar /x.jar \
  ${1} $(echo ${2} | sed "s|'|\"|g")
} 

我尝试过各种各样的东西,但没有任主要问题是,在任何其他方式,应用程序接收params引用示例“等待”,如果我不放任何“然后如果有任何空格等待而不是等待b,params被切断。我可能可能会改变它在应用程序内部删除引号但我想避免这种情况。

如果我这样做,那么我得到了上述问题。

java -Dfile.encoding="UTF-8" \  
-Duser.language="en" -Dspring.profiles.active="x" -jar /x.jar \
${1} $(echo ${2} | sed "s|'|\"|g")

提前致谢。

更新:主要问题是我的命令存储在一个env变量中!

java linux bash eval
1个回答
0
投票

经过很多痛苦和@thatootherguy的一些有用的建议后,我最终使用了这个解决方案

fun_example_call() {
    export LANG=C.UTF-8
    COMMAND=(java -Dfile.encoding="UTF-8" -jar /x.jar "$@")
    "${COMMAND[@]}"
    status=$?

    if [[ ${status} -eq 0 ]]
    then
        return 0
    else
        return 1
    fi
}


#$1 = command "example_command"
#$2 = params - example params "test='wow' wow='test'"
fun_example(){
    IFS="'" read -r -a array <<< $2
    RUN_ARRAY=("fun_example_call" $1)
    for (( VAR = 0; VAR < ${#array[@]}; VAR+=2 )); do
        RUN_ARRAY+=(${array[$VAR]}"${array[$VAR+1]}")
    done
    "${RUN_ARRAY[@]}"
}

希望,这可以帮助某人。就像@thatootherguy所说的那样,目标是拥有一系列参数,这样我们就不会触发系统(3)风格的语义

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.