我需要从 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
变量末尾卡住了一个回车符。(这在输出中显示为\r
and 。)对任何人来说,这只是另一个字符,它不会比or匹配更多。可以说,解决您的问题的最佳方法是更改命令以不输出回车符。但我不知道如何做到这一点,但我确实知道如何在将其放入 shell 后修复结果。0d
od -ctx1
YES
YESK
YESS
mysql
在你mysql
下达命令后,说
result="${result%$'\r'}"
构造
${变量名%细绳}
(其中添加了空格以便清晰显示)扩展为变量的值,并从末尾删除字符串。例如,如果$vehicle
是carriage
,那么${vehicle%riage}
就是car
。
$'细绳‘
与 (带引号的字符串) 相同,只是字符串可以包含转义序列,例如和回车符。因此,的值是从末尾删除回车符。现在您应该能够使用类似 的代码对其进行测试。'string'
\t
Tab\r
${result%$'\r'}
$result
[[ $result == 'YES' ]]