Bash脚本在命令周围加引号



我有一个Bash脚本,它将获得一个IP作为SSH隧道的一部分,但运行该脚本SSH隧道会失败。当使用set -x时,我可以看到它将SSH命令的参数放在单引号中,手动运行这一行会导致同样的错误。

脚本:

ssh -N -L 9000:${ip_array[$2]}:443 ssh-server

第一个参数在脚本的其他地方用于其他内容,这就是为什么在这里使用第二个参数。ssh-server是我的SSH配置中的一个别名,它指向我正在通过隧道传输的服务器。

我得到的输出是:

ssh -N -L '9000:"172.0.0.1":443' ssh-server

这可能是因为获取IP的脚本会向数组返回字符串吗?

您可以先尝试删除双引号:

ip=$(echo "${ip_array[$2]}" | sed "s/"//g")
ssh -N -L 9000:${ip}:443 ssh-server

或者只使用shell参数展开来删除引号:

ssh -N -L 9000:${ip_array[$2]//"/}:443 ssh-server

这句单独的双引号可能会打乱编辑器的语法高亮显示。

通过tr命令管道传输去掉引号:

ssh -N -L 9000:$( echo ${ip_array[$2]} | tr -d '"' ):443 ssh-server

最新更新