我如何在bash中填充此变量?

时间:2013-06-06 23:52:44

标签: bash shell

我试图从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没有争论。为什么这样,我如何在那里设置局部变量?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

逃避美元符号:

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

给你:

function test
{
    CURHOST=foo
    cd bar
    mkdir -p $CURHOST
}; test