Bash 在heredoc节中设置变量

Bash 在heredoc节中设置变量,bash,shell,heredoc,Bash,Shell,Heredoc,我是一个shell脚本的新手,所以我一定在做一些愚蠢的事情,为什么这不起作用: #!/bin/sh myFile=$1 while read line do ssh $USER@$line <<ENDSSH ls -d foo* | wc -l count=`ls -d foo* | wc -l` echo $count ENDSSH done <$myfile #/垃圾箱/垃圾箱 myFile=$1 读行时 做 ssh$USER@$line#/垃圾箱/垃圾箱 读行时;

我是一个shell脚本的新手,所以我一定在做一些愚蠢的事情,为什么这不起作用:

#!/bin/sh

myFile=$1

while read line
do
ssh $USER@$line <<ENDSSH
ls -d foo* | wc -l 
count=`ls -d foo* | wc -l`
echo $count
ENDSSH
done <$myfile
#/垃圾箱/垃圾箱
myFile=$1
读行时
做
ssh$USER@$line
#/垃圾箱/垃圾箱
读行时;做
回音开始$行

ssh$USER@$行这行可以用!非常感谢。既然你提到引用了heredoc代币,我就试过了,它也很有效。你能解释一下我什么时候应该和不应该引用heredoc代币吗?谢谢。如果您希望执行变量替换,请不要引用它。如果你只是想把这些东西运走,就引用它。在你的例子中,它有点复杂,因为shell最终会得到输入,所以它们最终会被扩展,但你不希望它发生在本地shell中。回答得好!我不明白为什么
\ENDSSH
能工作。我不认为这是一个很好的参考,通常情况下,herdoc行会扩展参数、命令和算术表达式。引用标记符号的第一个外观可防止出现这种情况。那么,问题就变成了,你是想把这些表达式扩展,还是想把文本照字面理解?
#!/bin/sh

while read line; do
  echo Begin $line
  ssh $USER@$line << \ENDSSH
  ls -d foo* | wc -l 
  count=`ls -d foo* | wc -l`
  echo $count
ENDSSH
done < $1