Bash引用问题
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变量中.永远不要让参数不加引号(如果你认为这样做会修复某些东西,你错了,你只是让事情变得更糟,去解决真正的问题).解决方案是使用一个函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |