ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [linux shell]参数传递之空格

[linux shell]参数传递之空格

原创 Linux操作系统 作者:germany006 时间:2013-07-12 14:55:09 0 删除 编辑

转载地址:http://zhenhuahust.diandian.com/post/2011-12-19/12361395


今天下午做实验数据的自动化时遇到一个很有趣的小问题,与大家分享下:

【背景】

S是一个bash脚本,P是一个python脚本,S在脚本中调用了P,并传递参数给P

【问题】

现在问题来了,在调用S的时候,有一个参数会传递给P。当传递S的参数是空格时,我们假设空格所在的位置是shell的$1,那么怎么把这个空格作为参数传递给P呢?

【方法】

1. python p $1

执行时自动略去最后的空格,失败

2. python p \"$1\"

这样执行时转义保证是python p " ",但是在shell中传参时其实是用空格分割的,所以传到p中的参数实际变成了[p, " , "]三个,不是空格,失败

3. python p \\$1

我想的是转义后变成python p \空格,传给p再次转移后就能还原成空格。其实不是,因为分割后认为传递的参数只有[p, \\]。看来走转义的路是行不通的。

4. 

temp = $2

python p ${temp:-空格}

和1实际上是同样的,失败

【分析】

shell从外部执行时,对于" "参数可以认为是空格,但是从内部解释时“ ”就被当成了两个参数

【解决方案】

子shell:

echo "python p \"$1" >> ~f.tmp

sh ./~f.tmp

将要执行的命令打到临时文件,然后作为子shell启动。

这个方法比较笨。各位如果有哪些比较好的方法,请不吝赐教:D

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28371090/viewspace-766140/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
ORACLE,MYSQL,POSTGRESQL,SQLSERVER

注册时间:2013-03-06

  • 博文量
    761
  • 访问量
    913330