1

我正在尝试从 bash 脚本运行类似的东西:

HOST=foo
DIR=bar

ssh user@$HOST "
function test
{
    CURHOST=$HOST
    cd $DIR
    mkdir -p $CURHOST
}; test"

当我运行它时,set -x我看到它转换为:

+ ssh user@foo '
   function test
   {
       CURHOST=foo
       cd bar
       mkdir -p
   }; test

然后它当然抱怨mkdir -p没有争论。为什么会这样,如何在其中设置局部变量?

4

2 回答 2

1

为防止替换,您可以使用单引号'...'或反斜杠\;例如,这个命令:

echo '$foo' \$foo "\$foo"

将打印:

$foo $foo $foo

并且不会使用变量foo.

在你的情况下,除了你特别需要替换的地方,你可能应该在任何地方使用,而不是使用"..."整个参数。'...'所以:

HOST=foo
DIR=bar

ssh user@$HOST '
function test
{
    CURHOST='"$HOST"'
    cd $DIR
    mkdir -p $CURHOST
}; test'
于 2013-06-06T23:55:17.047 回答
1

只需避开美元符号:

echo "
function test
{
    CURHOST=$HOST
    cd $DIR
    mkdir -p \$CURHOST
}; test"

给你:

function test
{
    CURHOST=foo
    cd bar
    mkdir -p $CURHOST
}; test
于 2013-06-06T23:59:05.527 回答