为何Bash变量表现与显式字符串不同?路径变量失效问题排查
问题原因及解决办法
核心问题1:使用了中文引号
你给变量赋值时用了中文双引号“”,而非Shell能识别的英文双引号""。中文引号会被当作字符串的一部分,导致FILE_DESTINATION的实际值包含开头的中文引号,且路径里的~在引号中不会被解析为用户家目录,Shell自然无法识别这个无效路径。
核心问题2:变量赋值未闭合引号
FILE_DESTINATION的赋值行末尾缺少闭合的引号,这会导致Shell解析时出现语法错误,进一步干扰路径的正常识别。
修正后的脚本
OUTPUT_DATE=$(date +"%Y%m%d_%H%M%S") LIVE_DATABASE="MyDatabase" FILE_DESTINATION=~/apps/path/databases/dump_$OUTPUT_DATE.sql mysqldump -u foobar -p123456 -h example.com -P 1234 $LIVE_DATABASE > $FILE_DESTINATION
如果要使用引号包裹路径,建议用$HOME代替~($HOME在引号中仍会被解析为家目录),写法如下:
OUTPUT_DATE=$(date +"%Y%m%d_%H%M%S") LIVE_DATABASE="MyDatabase" FILE_DESTINATION="$HOME/apps/path/databases/dump_$OUTPUT_DATE.sql" mysqldump -u foobar -p123456 -h example.com -P 1234 $LIVE_DATABASE > $FILE_DESTINATION
内容的提问来源于stack exchange,提问作者dangvy
相关产品推荐
相关产品推荐

