如何在引号中的引号中展开bash参数

  • 本文关键字:bash 参数 bash
  • 更新时间 :
  • 英文 :


下面是我正在尝试执行的bash脚本行:

psql -c 'GRANT ALL PRIVILEGES ON DATABASE "$PROJECT_ID" to "$PROJECT_ID";'

正如预期的那样,它不起作用,因为bash不解释单引号内的任何内容。由于同样的原因,交换单引号和双引号不起作用。

解决方案?

编辑:我所说的交换是不正确的——这对我来说是一个糟糕的假设;但是,为了确保psql语句仍然有效,不希望进行交换。

如果您确信此SQL语句中的双引号是正确的:

psql -c 'GRANT ALL PRIVILEGES ON DATABASE "'"$PROJECT_ID"'" to "'"$PROJECT_ID"'";'

这就是为什么:字符串引用shell是在逐字符的基础上完成的;我们不需要以相同的方式引用整个字符串,因此可以将几个不同引用的字符串子集连接在一起。

在这种情况下,这些子字符串是:

'GRANT ALL PRIVILEGES ON DATABASE "'
"$PROJECT_ID"
'" to "'
"$PROJECT_ID"
'";'

因此,当我们想传递一个文本"作为字符串的一部分时,我们用单引号将其括起来;当我们想展开一个变量时,我们会把它放在双引号中。

相关内容

  • 没有找到相关文章

最新更新