2010-04-30 47 views
3

如何測試某些字符串是否在bash中點?我已經試過這樣:在bash中測試一個點

if [ "$var" = "." ] 

這:

if [ "$var" = "\." ] 

但它不工作。

+1

'echo'$ {var}''產生沒有空格或多餘字符的'.'。將腳本運行爲/ bin/bash -x ./scriptname,以查看實際正在進行的操作。 – 2010-04-30 14:22:06

+0

您可以發佈一個簡短的示例腳本,並且您可以獲得證明「不起作用」的結果,因爲它適用於我。 – 2010-04-30 14:32:15

回答

4

工作對我來說:

$ d=. 
$ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi 
yes 
$ d=foo 
$ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi 
no 
0

嘗試加倍等於(==),比較與分配不同。

+0

謝謝。那竅門 – kofucii 2010-04-30 14:23:05

+0

在Bourne/bash中,=操作符用於兩者。 – Ray 2010-04-30 14:23:10

+0

-eq只能用於整數比較。 =需要用於字符串。 – Ray 2010-04-30 14:25:01

1

我的代碼:

#!/bin/bash 

var="." 

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

exit 0 

它打印:

Yup, it equals '.' 

調試:

[email protected]:~$ /bin/bash -x ./foo.sh 
+ var=. 
+ '[' . = . ']' 
+ echo 'Yup, it equals '\''.'\''' 
Yup, it equals '.' 
+ exit 0 

您可能在$var(或者$var爲空?)中可能有一些空白區域,請通過/bin/sh -x ./yourscript.sh運行它以查看它實際進行的比較。

請記住,==bashism,它只適用於Bash。它適用於那些習慣於單一的=導致分配的人。如果您僅使用bash,但您永遠不知道某些系統上可能指向的/ bin/sh是什麼,那麼這很好。最好只使用=並完全避免這個問題。

相關問題