解决linux shell中传递包含空格的参数

您所在的位置:网站首页 bash脚本输入参数 解决linux shell中传递包含空格的参数

解决linux shell中传递包含空格的参数

2023-07-21 11:04| 来源: 网络整理| 查看: 265

目录

一、传递给函数的某个参数含有空格

1.传递的带空格的参数是最后一个参数

 2.传递的带空格的参数不是最后一个参数

二、传递给shell脚本的参数带有空格

昨天一同事遇到一个问题,往函数中传递的一个参数是一个sql语句时,函数里只取了这个sql的第一个单词,他的写法大概类似这样:

test_param() { p1=$1 p2=$2 echo "p2:"$p2 } where_condition=`echo "where a=b;"` echo "where_condition:"$where_condition test_param a $where_condition

可以看到函数中只取了该参数的第一个单词。

这是因为函数的参数传递使用的是位置参数,且默认就是空格来间隔各个位置上的参数,所以他这种写法第二个参数的值就成了"where" 。下面总结一下我想到的解决办法:

一、传递给函数的某个参数含有空格 1.传递的带空格的参数是最后一个参数

这种情况解决办法比较多,下面分别总结下:

方法一:传递参数时将带上引号,引号内的所有内容都将作为一个参数,如果该参数中没有变量,单引号双引号都可以;有变量的话就用双引号。

test_param() { p1=$1 p2=$2 echo "p2:"$p2 } #第二个参数传递参数时带上引号 where_condition=`echo "where a=b;"` echo "where_condition:"$where_condition test_param a "$where_condition"

测试结果:

方法二:不使用该参数,而是将其对应的变量直接在函数中使用

test_param() { p1=$1 p2=$where_condition echo "p2:"$p2 } #调用函数时不传递该参数,而是直接在函数中使用变量 where_condition=`echo "where a=b;"` echo "where_condition:"$where_condition test_param a

方法三:使用$*或者$@传递该参数,会以一个单字符串显示所有传递的参数。不同之处在于$*会把所有包含的位置参数当成一个整体,而$@会把所有位置参数当成单独的字段(相当于一个列表)。本例中它们的用法一样。

test_param() { p1=$1 #取第二个位置参数到最后的所有内容 p2=`echo ${@:2}` echo "p2:"$p2 } where_condition="where a=b;" echo "where_condition:"$where_condition test_param a $where_condition test_param() { p1=$1 #取第二个位置参数到最后的所有内容 p2=${*:2} echo "p2:"$p2 } where_condition="where a=b;" echo "where_condition:"$where_condition test_param a $where_condition

以上代码的测试结果都是一样的,就不一一列出来了。 

 2.传递的带空格的参数不是最后一个参数

当该参数不是最后一个参数时,方法一跟方法二无需更改,方法三则需要明确知道该参数中含有几个空格才能正确使用,不然则不适用。比如,如果是第二个参数,该参数中含有两个空格可以写成:${@:2:3}。

二、传递给shell脚本的参数带有空格

我们来简单模拟一下这种情况。

p1=$1 p2=$2 echo "p2:"$p2

调用时如果直接传也是只能取到该参数的第一个单词。

使用方法一加上引号试试,参数获取正确:

 

因为是脚本调用,没办法使用第二种方式传递变量。 

试一下第三种方法:

p1=$1 p2=${*:2} echo "p2:"$p2

虽然没有加引号,仍然可以正常使用。

 也就是说,传递给shell脚本的参数带有空格时可以使用方法一和方法三。

大家还有更好的方法吗?欢迎一起交流探讨❥(^_-)

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3