对BASH脚本中的-n选项进行测试始终返回true
发布时间:2020-12-16 01:33:48 所属栏目:安全 来源:网络整理
导读:我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到[-n arg]测试的一个奇怪的(至少对我来说)行为.对于以下脚本: #!/bin/bashif [ -n $1 ]; then echo "The 1st argument is of NON ZERO length"fiif [ -z $1 ]; then echo "The 1st argum
我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到[-n arg]测试的一个奇怪的(至少对我来说)行为.对于以下脚本:
#!/bin/bash if [ -n $1 ]; then echo "The 1st argument is of NON ZERO length" fi if [ -z $1 ]; then echo "The 1st argument is of ZERO length" fi 我得到的结果如下: >没有参数: xylodev@ubuntu:~$./my-bash-script.sh The 1st argument is of NON ZERO length The 1st argument is of ZERO length >带参数: xylodev@ubuntu:~$./my-bash-script.sh foobar The 1st argument is of NON ZERO length 我已经发现用双引号括起$1可以得到预期的结果,但是我仍然想知道为什么当没有使用引号并且没有参数调用脚本时两个测试都返回true?似乎$1为null,所以[-n $1]应该返回false,不是吗?
引用它.
if [ -n "$1" ]; then 如果没有引号,如果$1为空,则执行[-n],这是真*,如果$1不为空,那么显然是真的. *如果你给[一个参数(不包括)),它总是如此. (顺便说一句,这是许多新用户在期望[0]为假时)陷入的陷阱.在这种情况下,单个字符串是-n. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 数组 – 当设置nounset时,如何“ – @ – expand(”${array
- docker – kubernetes不能拉当地形象
- 如何在POSIX shell脚本中迭代字符串的字符?
- angularjs – $http从服务到控制器的POST响应
- amazon-web-services – 将AWS SAM Local与docker中的dyna
- 提高WebService性能大数据量网络传输处理
- angularjs – 延迟一个angular.js $http服务
- Scala continuation插件是否支持嵌套移位?
- angularjs – 无法在$http响应中以角度访问’WWW-authentic
- bootstrap submenu 实现二级菜单及遇见的问题