我正在尝试用其他东西替换我的代码中的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变量中!
经过很多痛苦和@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)风格的语义