传递变量在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