传递变量在shell脚本

问题描述:

现在我到目前为止这个文件......传递变量在shell脚本

#!/usr/bin/env bash 

DIRECTORY=$1 

ssh [email protected] "$(cat <<'EOT' 
cd /web/$DIRECTORY || exit 
pwd 
unset GIT_DIR 
git log --oneline -n 10 --decorate 
git branch 
EOT 
)"; 

为什么PWD刚刚打印出“/网络/”?它实际上并没有使用我的变量。然后,所有的git命令都会抛出关于在web目录中的错误。

如果我在ssh-ing之前echo $ DIRECTORY,它会回应我的变量,但拒绝将它传递给ssh命令?

发生这种情况是因为您引用了这里的doc分隔符。这里的POSIX

如果任何字符被引用,分隔符是通过对单词进行引用删除形成,这里的文档线不会扩大。否则,分隔符就是这个词本身。

而且这里有一个例子:

#!/bin/bash 
var=42 

cat << 'end' 
With quotes: $var and \$var 
end 

cat << end 
Without quotes: $var and \$var 
end 

执行时:

With quotes: $var and \$var 
Without quotes: 42 and $var