linux执⾏脚本转义空格,[linuxshell]参数传递之空格
转载地址:
今天下午做实验数据的⾃动化时遇到⼀个很有趣的⼩问题,与⼤家分享下:
【背景】
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从外部执⾏时,对于" "参数可以认为是空格,但是从内部解释时“ ”就被当成了两个参数
【解决⽅案】
linux循环执行命令脚本⼦shell:
echo "python p \"$1" >> ~f.tmp
sh ./~f.tmp
将要执⾏的命令打到临时⽂件,然后作为⼦shell启动。
这个⽅法⽐较笨。各位如果有哪些⽐较好的⽅法,请不吝赐教:D
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论