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

Bash引用问题

发布时间:2020-12-16 01:51:13 所属栏目:安全 来源:网络整理
导读:A="echo 'q'"$A 我得到了结果’q’ 但如果我直接输入echo’q’,那就是q(没有单引号) 所以,我想知道在双引号中面对单引号时bash会遵循什么规则. 最初的问题是 A="curl http://123.196.125.62/send -H 'Host: poj.org' -e http://poj.org/send"$A 我卷曲了:(6
A="echo 'q'"

$A

我得到了结果’q’

但如果我直接输入echo’q’,那就是q(没有单引号)

所以,我想知道在双引号中面对单引号时bash会遵循什么规则.

最初的问题是

A="curl http://123.196.125.62/send -H 'Host: poj.org' -e http://poj.org/send"

$A

我卷曲了:(6)无法解析主持人’poj.org”

如果我只是在终端输入命令就可以了.

附:我想使用$A来排除A中的命令

解决方法

如果要“保存”命令以便以后执行,则不需要变量.你想要一个功能.

a() { curl http://123.196.125.62/send -H 'Host: poj.org' -e http://poj.org/send; }

将代码放入变量是很糟糕的,因为变量是数据而不是代码的容器.另外,你看到的问题是因为$A不执行A中的bash代码,它真正做的是将A的值拆分为单词,然后它对这些单词执行Pathname Expansion,并且作为这两个操作的结果,它执行由第一个结果单词命名的程序,并将其他单词作为参数传递.在您的特定情况下,这就是发生的事情(我使用[]来表示“单位”):

A:                        [echo 'q']
after wordsplitting:      [echo] ['q']
after pathname expansion: [echo] ['q']

现在bash查找一个名为echo的程序,并将参数’q’传递给它.

这不是执行bash代码,因为如果你执行echo’q’作为bash代码,bash在完成后会删除单引号.同样,你不能做管道,重定向等.像这样,因为它们也是bash语法(就像你的单引号一样).

回顾:永远不要把代码放在bash变量中.永远不要让参数不加引号(如果你认为这样做会修复某些东西,你错了,你只是让事情变得更糟,去解决真正的问题).解决方案是使用一个函数.

(编辑:李大同)

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

    推荐文章
      热点阅读