如何在bash中填充此变量?
我正在尝试从bash脚本运行类似这样的内容:如何在bash中填充此变量?,bash,shell,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
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
没有参数。为什么会这样?如何在其中设置局部变量 为了防止替换,可以使用单引号“…”
或反斜杠\
;例如,此命令:
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'
只要避开美元符号:
echo "
function test
{
CURHOST=$HOST
cd $DIR
mkdir -p \$CURHOST
}; test"
给你:
function test
{
CURHOST=foo
cd bar
mkdir -p $CURHOST
}; test
我建议使用here文档而不是多行字符串,即ssh user@$HOST。您也可以对函数的本地变量使用local
。最后,即使您可以使用function test
声明函数,但更常见的做法是使用test()
。