转载地址: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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28371090/viewspace-766140/