如何在参数中使用双引号运行shell脚本命令?

时间:2010-08-06 01:33:26

标签: shell double-quotes

我需要运行此命令

psql -c "create database $var with encoding 'unicode';" -U edumate template1

来自不同用户下的脚本。 su语法为su postre -c 'some command',因此需要另外引用。另请注意,psql命令里面有$var变量。

所以'some command'= psql -c“create database $ var with encoding'unicode';” -U edumate template1

和'some command'也必须用引号括起来(我猜)

3 个答案:

答案 0 :(得分:5)

当你需要将shell作为单个参数接受时,你可以使用一个技巧,它既有单引号又有双引号。因为shell不会让你转义引号,你需要将它转换为多个邻接的引用字符串,根据需要在单引号和双引号之间切换以保护内部。这很难看,但它确实有效。例如,要

   He said "It's done"

是一个参数,你可以接近三个字符串:

   'He said "It'   - protect this substring with single quotes
   "'"             - protect this substring with double quotes
   's done"'       - protect this substring with single quotes

得到:

   'He said "It'"'"'s done"'

在你的情况下会产生一个非常丑陋的:

su postre -c 'psql -c "create database '"$var with encoding 'unicode';"'" -U edumate template1'

答案 1 :(得分:1)

您可以尝试sudo代替su e.g。

sudo psql -c "create database $var with encoding 'unicode';" -U edumate template1

(注意:我没有完全测试过这个命令,因为我现在没有和我一起使用psql)

答案 2 :(得分:0)

我会将其输入到脚本文件中(将其输入到vi等编辑器中并将其保存到文件中)。然后,chmod + x,然后执行su -c '<filename>'

如果您不想将其保存到文件中,那么您必须在命令中使用\"\'来转义引号,具体取决于您决定使用哪个引号su -c