Shell 未打印ksh变量值
我正在尝试运行以下脚本,但是变量Shell 未打印ksh变量值,shell,ksh,Shell,Ksh,我正在尝试运行以下脚本,但是变量$user的值没有打印出来。有人能解释一下吗 #!/usr/bin/ksh -x x=`tty` at -k now <<end user=Bill echo $user >> $x end #/usr/bin/ksh-x x=`tty` at-k现在$x 结束 不能在heredoc内设置变量。您可以这样做: x=`tty` user=Bill at -k now <<end echo
$user
的值没有打印出来。有人能解释一下吗
#!/usr/bin/ksh -x
x=`tty`
at -k now <<end
user=Bill
echo $user >> $x
end
#/usr/bin/ksh-x
x=`tty`
at-k现在$x
结束
不能在heredoc内设置变量。您可以这样做:
x=`tty`
user=Bill
at -k now <<end
echo $user >> $x
end
x=`tty`
用户=账单
at-k现在$x
结束
问题在于,当结束标记不带引号时,变量在此处文档中展开
这意味着您在处传递给的命令是:
user=Bill
echo >> /dev/pts/4
如果您引用结束标记,即
at -k now << 'end'
user=Bill
echo $user >> $x
end
在这种情况下,$user
在
调用的shell中设置并由展开,并将按预期展开
请注意,在这种情况下必须导出$x
,否则at
将看不到它,也不会将它包括在调用的shell环境中。这有点误导。使用heredoc馈送到at
的命令可以包括变量赋值。当使用引号(例如“end”
)时,不会展开任何内容。根据manbash
“如果word中有任何字符被引用,则分隔符是word上删除引号的结果,并且here文档中的行不会展开。如果word不带引号,则此处文档的所有行都将进行参数扩展、命令替换和算术扩展。
user=Bill
echo $user >> $x