关闭

shell 中 test ([])比较字符串 x"$variable"的使用

396人阅读 评论(0) 收藏 举报

shell 中 字符串比较 x”$variable”的使用

本文章参考stackoverflow上Why do shell script comparisons often use x$VAR = xyes?

  • 不使用双引号“”,不使用前缀x
  • 不使用双引号“”,使用前缀x
  • 使用双引号“”,不使用前缀x
  • 使用双引号“”,使用前缀x


不使用双引号“”,不使用前缀x

有变量SHELL_VAR未定义($SHELL_VAR为空)
if test $SHELL_VAR = yes; then --> if test = yes; then
显然是有语法错误的,test 丢失参数。

不使用双引号“”,使用前缀x

$SHELL_VAR值为空
if test x$SHELL_VAR = yes; then --> if test x = yes; then
这样貌似看着是没有问题的。
但是假如此时$SHELL_VAR值为” yes”,注意yes前面有一个空格,那么:
if test x$SHELL_VAR = yes; then --> if test x yes = yes; then
显然这样也是有语法错误的,test有两个参数x 和 1。

使用双引号“”,不使用前缀x

$SHELL_VAR值为空
if test "$SHELL_VAR" = "yes"; then --> if test "" = "yes"; then
$SHELL_VAR值为” yes”
if test "$SHELL_VAR" = "yes"; then --> if test " yes" = "yes"; then
貌似使用“”把变量包起来就没有问题了。
但是假如此时$SHELL_VAR值为“-n”或者 “-f”
if test "$SHELL_VAR" = "yes"; then --> if test "-f" = "yes"; then
那么此时“-f” 是有二义性的,是作为test命令的option还是test的argument。

使用双引号“”,使用前缀x

$SHELL_VAR值为空
if test x"$SHELL_VAR" = x"yes"; then --> if test x"" = x"yes"; then
$SHELL_VAR值为” yes”
if test x"$SHELL_VAR" = x"yes"; then --> if test x" yes" = x"yes"; then
$SHELL_VAR值为“-n”或者 “-f”
if test x"$SHELL_VAR" = x"yes"; then --> if test x"-f" = x"yes"; then

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

linux shell脚本中,关于test测试和if判断中常用的标志[-eq,gt..]

1. 关于某个文档的『文档类型』判断,如 test -e filename 表示存在否 -e 该『文档』是否存在(常用) -f 该『文档』是否存在且为档案(file)(常用) -d 该『文档』是...
  • u012906135
  • u012906135
  • 2016-07-15 17:25
  • 2880

Struts2 用 s:if test 判断属性和字符串相等(特殊的方式)

字符串N一定要用“”双引号包含,从test的包含则用单引号 ‘ ’,如果相反,则不能正确判断该属性是否与该字符串相等。 正确: 错误: 因为java是强类型语言,单引号表...
  • zhujiaxing666666
  • zhujiaxing666666
  • 2013-01-18 20:12
  • 6529

shell中if条件字符串、数字比对,[[ ]]和[ ]区别

学习shell的时候总是被shell里的条件判断方式搞得头疼,经常不知道改 用[],[[]],(())还是test,let,而很少有书把它们的关系讲解的很清楚(应该是我悟性差或是看书太少),今天总结一...
  • u011138533
  • u011138533
  • 2016-11-15 17:14
  • 1461

linux shell编程学习--test测试比较命令

本文介绍了linux shell自带test命令的各种用法。在linux shell编程过程中,如何使用test命令进行算术比较,文件属性,文件修改,字符串比较,以及逻辑表达式运算的操作。
  • shuanghujushi
  • shuanghujushi
  • 2016-05-14 12:57
  • 2503

Shell字符串比较相等、不相等方法小结

#!/bin/sh#测试各种字符串比较操作。 #shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型, #单引号不对相关量进行替换,如不对$符...
  • Mr_LeeHY
  • Mr_LeeHY
  • 2017-07-30 14:43
  • 494

脚本乐园 Shell字符串比较相等、不相等方法小结

#!/bin/sh    #测试各种字符串比较操作。 #shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型, #单引号不对相关量进行替换,如...
  • skdkjxy
  • skdkjxy
  • 2015-01-04 08:42
  • 3459

shell中if判断条件中使用[],[[]],(())还是test,let的比较

学习shell的时候总是被shell里的条件判断方式搞得头疼,经常不知道改 用[],[[]],(())还是test,let,而很少有书把它们的关系讲解的很清楚(应该是我悟性差或是看书太少),今天总结一...
  • nyist327
  • nyist327
  • 2015-04-01 11:06
  • 1987

关于变量的定义

先截取一段道长的 变量的作用域  通常情况下,每个变量默认都是局部变量。 一个case里的变量,作用域在这个case内部; 一个userkeyword里的变量,作用域在这个userkeyw...
  • zhouxuan623
  • zhouxuan623
  • 2014-04-23 15:57
  • 1107

shell判断和比较

shell判断和比较 ========== 1  shell 的$! ,$?, $$,$@     $n        $1 the first parameter,$2 the s...
  • bingyu9875
  • bingyu9875
  • 2016-11-24 10:01
  • 240

shell脚本----if(数字条件,字符串条件,字符串为空)

二元比较操作符,比较变量或者比较数字. 注意数字与字符串的区别. 1.整数比较  -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne...
  • yf210yf
  • yf210yf
  • 2013-06-30 14:01
  • 160847
    个人资料
    • 访问:48449次
    • 积分:747
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:40篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论