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