shell 脚本中字符串变量中的特殊字符

Special character in string variable in shell script

PubkeyContent=$(cat $Pubkey)    
read -r -d '' SSH_SCRIPT <<EOM
    $(grep ${PubkeyContent} ~/.ssh/authorized_keys")
EOM

我得到了错误的结果。

[Debug] SSH_SCRIPT = $(grep ssh-rsa AAAAB3NzaC1yc2EAAAzSb7WKnMsysGA8kuq5Ysp02Y75d5 sam ~/.ssh/authorized_keys")com

我想要这个结果

 [Debug] SSH_SCRIPT = $(grep "ssh-rsa AAAAB3NzaC1yc2EAAAzSb7WKnMsysGA8kuq5Ysp02Y75d5 sam@com" ~/.ssh/authorized_keys")

一个简单的解决方法是在 here-doc 中引用 PubkeyContent 变量内容,即

read -r -d '' SSH_SCRIPT <<EOM
    $(grep "${PubkeyContent}" ~/.ssh/authorized_keys")
EOM

或者,如果您使用的是 bash/ksh/zsh shell,它支持一种使用输入 re-direction < file 自动插入文件内容的方法,从而避免无用地使用cat。您可以将其应用于内部命令替换为

read -r -d '' SSH_SCRIPT <<EOM
    $(grep "$(<"$Pubkey")" ~/.ssh/authorized_keys")
EOM