linux - Bash 变量和空格分隔
问题描述
我正在构建一个脚本,该脚本需要动态生成某些值,将它们存储到变量中,然后将它们用作命令或将值输入到函数中以供以后使用。
问题是一旦最终字符串相当长并且包含空格。我遇到的问题是 shell 认为变量的值只是一个长字符串。所以当试图重用这个值时,shell 认为这是一个有效的单词。
./sql_list_test.sh: line 14: mysql -uroot -pPassword test -B -e "SELECT LastModified,HeaderLogoImage FROM Merchant LastModified >= '1970-01-01 00:00:00.000'" | sed "/NULL/d ; /N/d ; s//merchantimages///g ; s/.*///g ; /^s*$/d" > /merchantimages_Merchant_HeaderLogoImage.list: No such file or directory
所以字符串格式正确,复制+粘贴到 shell 显示命令工作正常。
你如何使用 bash 来解决这个问题?
不,这不是“您没有将变量放入双引号”的问题
这是如何构建该字符串/变量的示例脚本
#!/bin/bash
MYSQL_CMD='mysql -uroot -pPassword test -B -e'
PREFIX='merchantimages'
SED_CMD="sed \"/NULL/d ; /\\N/d ; s/\/${PREFIX}\///g ; s/.*\///g ; /^\s*$/d\""
TIMESTAMP='1970-01-01 00:00:00.000'
SQL_LIST=$(grep $PREFIX $HOME/sql_cmd_list | envsubst)
while read CMD; do
echo "Run this: $CMD"
MYSQL_RUN() {
"$CMD"
}
MYSQL_RUN
done <<< $SQL_LIST
这是 sql_cmd_list 文件中的一行,从中提取值
$MYSQL_CMD "SELECT LastModified,HeaderLogoImage FROM Merchant LastModified >= '$TIMESTAMP'" | $SED_CMD > $FILE_LOCATION/merchantimages_Merchant_HeaderLogoImage.list
解决方案
推荐阅读
- html - 如何在网格中制作图像标签的纵横比?
- ios - 快速使用 GTSiLib 的正确方法是什么?
- scheme - 什么决定了延续可以应用到的值的数量和类型?
- javascript - msg 对象的抽象变量——寻找循环对象
- javascript - Firestore 订购限制
- python - 比较多列中的 2 个数据帧并保存不匹配的行
- mysql - 如何仅将表的一行的内容链接到另一个表的列?
- swift - 尝试使用 StoreKit 恢复应用内购买时未收到预期的委托调用
- python - 如何将两个或多个参数传递给 Button 命令?
- c# - asp.net core 2.1中基于国家的本地化