shell脚本,我从root用户切换到普通用户之后,新定义了一个变量,但打印变量的值是空的,怎么回事?
发布网友
发布时间:2022-04-23 14:31
我来回答
共2个回答
热心网友
时间:2023-10-18 14:39
在$前面加上转义, echo ${Result1} 替换成 echo \${Result1}
这个问题跟root用户切换到普通用户什么的没关系,而是因为你在用here-document的时候,并没有用双引号或单引号将!引用起来,或用转义符\将here-document中的元字符$转义,这时候here-document中的文本将被扩展,即参数替换被启用。
你运行一下这段脚本,看看Result1值的变化,就会明白了
#!/bin/bash
Result1="001"
echo "Parameter substitution is enabled"
bash<<EOF
if [ "1" = "1" ];
then
Result1="111";
echo ${Result1};
echo "wr";
fi
EOF
echo "Parameter substitution is disabled"
bash<<EOF
if [ "1" = "1" ];
then
Result1="111";
echo \${Result1};
echo "wr";
fi
EOF
bash<<'EOF'
if [ "1" = "1" ];
then
Result1="111";
echo ${Result1};
echo "wr";
fi
EOF
热心网友
时间:2023-10-18 14:39
su - comuser<<!
这句话不明白,注释之后,普通用户可以打印两行的:
111
wr
用root身份来运行的确结果不一样,可能的原因是在‘!’符号和下一行之间缺了什么而导致result这个变量没有被赋值。具体缺什么我就不清楚了。