免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2402 | 回复: 7
打印 上一主题 下一主题

command substitution 中可否把变量里的内容当作命令来执行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-16 12:19 |只看该作者 |倒序浏览
不好意思各位,实际代码与样例代码有点出入,请直接跳至 7 楼看问题。


原帖:
游客,如果您要查看本帖隐藏内容请回复


[ 本帖最后由 lovetide 于 2008-12-16 17:44 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-16 12:27 |只看该作者
。。。。
。。。。

[ 本帖最后由 nuclearxin 于 2008-12-16 12:29 编辑 ]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2008-12-16 12:39 |只看该作者
这段代码没错

论坛徽章:
0
4 [报告]
发表于 2008-12-16 12:47 |只看该作者
[root@IMServer /]# cmd="date +%F"
[root@IMServer /]# sql_output=$($cmd)
[root@IMServer /]# echo $sql_output
2008-12-16

论坛徽章:
1
2015年亚洲杯之韩国
日期:2015-04-24 09:07:02
5 [报告]
发表于 2008-12-16 13:02 |只看该作者
经测试 在我的平台没问题哦

论坛徽章:
0
6 [报告]
发表于 2008-12-16 13:46 |只看该作者
我的也没问题。

论坛徽章:
0
7 [报告]
发表于 2008-12-16 14:23 |只看该作者
不好意思各位,实际代码与样例代码有点出入,初步判断跟 cmdline 变量中包含双引号有关系:

  1. # 代码样例2:变量中加了引号
  2. cmdline="date \"+%F %T\""

  3. $($cmdline)
  4. #报错:
  5. #date: extra operand `%T"'
  6. #Try `date --help' for more information.

  7. sql_output=$($cmdline)
  8. echo $sql_output
  9. # 输出:
  10. #date: extra operand `%T"'
  11. #Try `date --help' for more information.
复制代码



  1. # 代码样例3:比较接近实际环境,但预期的错误跟实际环境下才错误仍然不同
  2. # osql 是 SQL Server 2000 带的一个命令行工具
  3. # 以下代码在 cygwin 环境下执行……

  4. DatabaseServer=localhost
  5. DatabaseUserName=sa
  6. DatabasePassword=SA_PASSWORD
  7. DatabaseName=PROJECT_DATABASE
  8. BeginTime=2008-12-12
  9. EndTime=2008-12-14
  10. sql="execute dbo.一个存储过程 '$BeginTime', '$EndTime'"
  11. echo -e "sql=\n$sql"
  12. # 输出:
  13. #sql=
  14. #execute dbo.一个存储过程 '2008-12-12', '2008-12-14'

  15. #cmd="osql -b -n -S $DatabaseServer -U $DatabaseUserName -P $DatabasePassword -d $DatabaseName" # 不带双引号
  16. cmd="osql -b -n -S $DatabaseServer -U $DatabaseUserName -P $DatabasePassword -d $DatabaseName -Q \"$sql\""
  17. echo -e "command=\n$cmd"
  18. # 输出:
  19. #command=
  20. #osql -b -n -S localhost -U sa -P SA_PASSWORD -d PROJECT_DATABASE -Q "execute dbo.一个存储过程 '2008-12-12', '2008-12-14'"
  21. ###############
  22. # 备注:上面输出的 command 如果直接粘贴在 cygwin 里可以执行,而且也达到了预期输出结果。
  23. ###############

  24. sql_output=$( ${cmd} )
  25. echo -e "output=$sql_output"
  26. # 预期输出1(如果sqlserver不存在):
  27. #[DBNETLIB]SQL Server 不存在或访问被拒绝
  28. #[DBNETLIB]ConnectionOpen (Connect()).
  29. # 预期输出2(如果sqlserver存在、且用户名密码都正确、且存储过程也存在):则应该是存储过程的输出结果

  30. # 实际输出 是 osql 的帮助信息(也就是 osql -? 命令的输出结果),而如果用 cmd="osql -b -n -S $DatabaseServer -U $DatabaseUserName -P $DatabasePassword -d $DatabaseName",则能得到预期的输出结果,所以怀疑是跟 cmd 变量中包含双引号有关

复制代码


[ 本帖最后由 lovetide 于 2008-12-16 17:46 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-12-16 16:13 |只看该作者
date +"%F %T"
另外,不要把字体弄得这么大,眼睛看得很痛。

[ 本帖最后由 walkerxk 于 2008-12-16 16:14 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP