有没有办法避免下面第一个eval
代码?我尝试使用${LASTPIPE[0]}
这样的东西,但这对我来说太复杂了。例如,当我尝试使用分号($MYSQLCOMMAND; if ...
)注入代码时,它将输出分解为管道。我花了8个多小时徘徊StackOverflow只是为了放弃并再写一个没有管道的SQL命令。不想发布糟糕的书面代码。
MYSQLQUERY="select * from $TABLENAME"
MYSQLTOPTIONS="--defaults-extra-file=$EXTRA -h $HOSTNAME -D $DBNAME -N -e"
MYSQLCOMMAND='mysql $MYSQLTOPTIONS "$MYSQLQUERY"'
# Exit immediately if something wrong with MySQL command
if eval "$MYSQLCOMMAND > /dev/null" ; then : ; else \
printf "Script returned non-zero exit code: %s\n" "$?" ; exit $?; fi
# Count rows for valid JSON output
ROWS=0
eval $MYSQLCOMMAND | \
while read ; \
do
((ROWS++))
done
(rest of the code generates JSON with calling the same
eval ... while read... and verified by https://jsonlint.com/)
此外,我想听听您对代码的任何评论,因为我不是经验丰富的bash编码器。