Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 未打印ksh变量值_Shell_Ksh - Fatal编程技术网

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