[英]Invoking a bash command with an argument '#' in it
考虑以下代码:
sqls='/mnt/c/alias/Binn/SQLCMD.EXE -b -S HostName -U Username -P MyPW# -d dbName'
这是在HostName
上使用用户名Username
连接到SQL Server DB dbName
的命令的前缀
`$sqls -Q "select 1;"`
在其上执行select 1
语句,它可以按预期工作。
$($sqls -Q "select 1;")
失败。 为什么? 是因为密码中的“#”吗? 我应该如何更改上面的sqls行,使其与$(...)
表达式一起使用?
将命令存储在字符串中很容易失败 。 我们可以弄清楚为什么它不起作用,但是更好的办法是使用一个函数:
sql() {
/mnt/c/alias/Binn/SQLCMD.EXE -b -S HostName -U Username -P 'MyPW#' -d dbName -Q "$1"
}
这样可以使用引号引起来,从而消除了可能破坏命令的可能性。
像sql 'select 1'
一样使用它。 使用标准命令替换保存结果:
foo=$(sql 'select 1')
还请记住,您可以使用配置文件(可能是$HOME/.my.cnf
,但看起来好像在Windows上,所以不确定)可以存储默认用户,密码和数据库,从而使您可以运行查询而无需密码所有这些选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.