如何在命令中实际包含回声?

问题描述 投票:0回答:1

在我的脚本中有:

#!/bin/bash

# Take sudo password from the first argument if present
SUDO="sudo -u postgres"
if [ "$1" != "" ]; then
    SUDO="echo $1 | sudo -S -u postgres"
fi

${SUDO} psql -c "create database foo;"

... several other similar commands here ...

[当我使用myPassword运行脚本时,我得到:

myPassword | sudo -S -u postgres psql -c create database foo;

所以它只是在回声。显然,我想要的是从字面上运行该命令,但要使$1展开:

$ echo myPassword | sudo -S -u postgres psql -c create database foo;

我该怎么做?

bash echo sudo
1个回答
0
投票

管道|,重定向<和类似的东西在通过扩展变量运行命令时不会被外壳程序解释。 示例:

$ v='echo a | cat'
$ $v
a | cat > b

要解释它们,您可以使用eval

$ v='echo a | cat'
$ eval "$v"
a

但是,由于您经常遇到引用问题,所以对此不以为然。通常,有解决特定问题的更好方法。

© www.soinside.com 2019 - 2024. All rights reserved.