如何在 bash 中检查从 MySQL 返回的变量?

如何在 bash 中检查从 MySQL 返回的变量?

我需要从 bash 使用 MySQL 运行存储过程。存储过程返回一个变量,我需要在 bash 中检查变量的值以相应地显示它。如果我直接回显变量,它会正确显示该值,但如果我使用 检查该值if,则if条件永远不会满足,并且在以下情况下不会显示“YES”。

为了简单起见,我简化了 bash 文件,如下所示:

result=$(mysql -h localhost -u$MYSQL_USER -p$MYSQL_PASSWORD -s -e "set @myVarible = 'YES';select @myVarible" $MYSQL_DATABASE)

if [[ $result == 'YES' ]] ; then
    echo YES
fi

的输出echo -n "$result" | od -ctx1

0000000   Y   E   S  \r
         59  45  53  0d
0000004

答案1

您的输出echo -n "$result" | od -ctx1显示result变量末尾卡住了一个回车符。(这在输出中显示为\rand 。)对任何人来说,这只是另一个字符,它不会比or匹配更多。可以说,解决您的问题的最佳方法是更改​​命令以不输出回车符。但我不知道如何做到这一点,但我确实知道如何在将其放入 shell 后修复结果。0dod -ctx1YESYESKYESSmysql

在你mysql下达命令后,说

result="${result%$'\r'}"

构造

${变量名细绳}

(其中添加了空格以便清晰显示)扩展为变量的值,并从末尾删除字符串。例如,如果$vehiclecarriage,那么${vehicle%riage}就是car

$'细绳

与 (带引号的字符串) 相同,只是字符串可以包含转义序列,例如和回车符。因此,的值是从末尾删除回车符。现在您应该能够使用类似 的代码对其进行测试。'string'\tTab\r${result%$'\r'}$result[[ $result == 'YES' ]]

相关内容