在bash中测试一个点

在bash中测试一个点,bash,if-statement,Bash,If Statement,如何在bash中测试某个字符串是否为点?我试过这个: if [ "$var" = "." ] 这是: if [ "$var" = "\." ] 但它不起作用。尝试将相等值加倍(=),比较与分配不同。对我有效: $ d=. $ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi yes $ d=foo $ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi no 我的代码: #!/bin/

如何在bash中测试某个字符串是否为点?我试过这个:

if [ "$var" = "." ]
这是:

if [ "$var" = "\." ]
但它不起作用。

尝试将相等值加倍(
=
),比较与分配不同。

对我有效:

$ d=.
$ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi
yes
$ d=foo
$ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi
no
我的代码:

#!/bin/bash

var="."

[ $var = "." ] && echo "Yup, it equals '.'"

exit 0
其中打印:

Yup, it equals '.'
调试:

tpost@tpost-desktop:~$ /bin/bash -x ./foo.sh
+ var=.
+ '[' . = . ']'
+ echo 'Yup, it equals '\''.'\'''
Yup, it equals '.'
+ exit 0
您可能在
$var
中有一些空白(或者
$var
可能是空的?),请通过
/bin/sh-x./yourscript.sh
运行它以查看它实际比较的内容


请记住,==是一种巴什主义,它只在Bash中有效。对于习惯于使用单个=的人来说,这是一种安慰。如果您只使用bash,这很好,但您永远不知道某些系统上的/bin/sh可能指向什么。最好只使用=并完全避免问题。

是否
回送“${var}”
生成一个没有空格或额外字符的
?以/bin/bash-x./scriptname的形式运行脚本,看看实际发生了什么。您能否发布一个简短的示例脚本以及您得到的结果来演示“它不起作用”,因为它对我来说效果很好。在Bourne/bash中,=运算符用于两者。-eq只能用于整数比较需要用于字符串。@Ray,我说的是一般性的,但你是对的。当比较整数时,=、==和-eq在bash中做相同的事情。这是两个方面的错误建议:1)赋值距离很近。2) fsck使用
==
而不是
=
进行字符串比较,使得脚本立即不可移植。