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
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