linux 执行脚本 转义空格,[linux shell]参数传递之空格

转载地址:

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

【背景】

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值