加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 忽略变量内的引号

发布时间:2020-12-15 18:26:06 所属栏目:安全 来源:网络整理
导读:我想从这样的变量传递一个参数到rsync: myopts='-e "ssh -p 1234" -a'rsync $myopts 192.168.0.1:/a /a 出于某种原因,这不起作用.我甚至找到了this webpage,它说它不起作用: ### NO NO NO: this passes three strings:### (1) "my### (2) multiword### (3)
我想从这样的变量传递一个参数到rsync:
myopts='-e "ssh -p 1234" -a'
rsync $myopts 192.168.0.1:/a /a

出于某种原因,这不起作用.我甚至找到了this webpage,它说它不起作用:

### NO NO NO: this passes three strings:
###      (1)  "my
###      (2)  multiword
###      (3)  argument"
MYARG=""my multiword argument""
somecommand $MYARG

### THIS IS NOT (!!!!) THE SAME AS ###
command "my multiword argument"

### YOU NEED ###
MYARG="my multiword argument"
command "$MYARG"

不幸的是,它没有说明为什么它不起作用.

包含rsync调用的脚本被许多其他脚本使用,因此我只能以兼容的方式更改它.无法解决的解决方案是使用数组:

myopts=('-a' '-v' '-z') # new way,would work
myopts='-a -v -z'       # old way,breaks
rsync "${myopts[@]}" 192.168.0.1:/a /a

变量中的选项完全被忽略.

在变量扩展之后,唯一的处理是字拆分和通配符扩展(如果变量在双引号内,这些都不会完成),而不是引用处理.如果要重做命令行解析的所有步骤,则需要使用eval:
eval "rsync $MYOPTS 192.168.0.1:/a /a"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读