BASH SQLITE3 LIKE 子句后的变量
BASH VARIABLE ADEED AFTER SQLITE3 LIKE CLAUSE
我对我试图插入脚本的 sqlite3 命令有疑问
if [[ -n $(tail -z 600 /var/log/pihole.log | grep "$IP" | wc -c) ]];then
sudo -u pihole sqlite3 /etc/pihole/pihole-FTL.db 'DELETE FROM network WHERE hwaddr LIKE "$MAC"'
fi
但很快我 运行 我的程序实际上并没有按照它的目的运行!
我已经尝试使用真实的 mac 地址代替变量 $MAC 并且它有效!
所以我的问题是如何在这个特定的 bash 命令和我的脚本中实际附加一个变量!
提前致谢,非常感谢!
您的问题是单引号的使用:在 bash 中变量没有用单引号展开。您可以通过使用双引号或混合使用单引号和双引号来解决此问题(确保要扩展的变量在双引号中):
$ MAC=1111
$ echo "DELETE FROM network WHERE hwaddr LIKE \"$MAC\""
DELETE FROM network WHERE hwaddr LIKE "1111"
$ echo 'DELETE FROM network WHERE hwaddr LIKE '"\"$MAC\""
DELETE FROM network WHERE hwaddr LIKE "1111"
我对我试图插入脚本的 sqlite3 命令有疑问
if [[ -n $(tail -z 600 /var/log/pihole.log | grep "$IP" | wc -c) ]];then
sudo -u pihole sqlite3 /etc/pihole/pihole-FTL.db 'DELETE FROM network WHERE hwaddr LIKE "$MAC"'
fi
但很快我 运行 我的程序实际上并没有按照它的目的运行!
我已经尝试使用真实的 mac 地址代替变量 $MAC 并且它有效!
所以我的问题是如何在这个特定的 bash 命令和我的脚本中实际附加一个变量!
提前致谢,非常感谢!
您的问题是单引号的使用:在 bash 中变量没有用单引号展开。您可以通过使用双引号或混合使用单引号和双引号来解决此问题(确保要扩展的变量在双引号中):
$ MAC=1111
$ echo "DELETE FROM network WHERE hwaddr LIKE \"$MAC\""
DELETE FROM network WHERE hwaddr LIKE "1111"
$ echo 'DELETE FROM network WHERE hwaddr LIKE '"\"$MAC\""
DELETE FROM network WHERE hwaddr LIKE "1111"