2013-11-01 48 views
33
比較兩個字符串

我的整個腳本是目前這樣的:獲得 「命令未找到」 錯誤而猛砸

#!/bin/sh 
clear; 
blanko=""; 
# Dummy-Variablen 
variable=Testvariable; 
if [[$variable == $blanko]]; 
then 
    echo "Nichts da!" 
else 
    echo $variable 
fi 

,如果我進入

TestSelect.sh 

我得到

/usr/bin/TestSelect.sh: line 6: [[Testvariable: command not found 
Testvariable 

我怎樣才能解決這個問題?

+4

提示:[shellcheck(http://www.shellcheck.net)會自動指向解決這個問題和其他基本問題。 –

+0

謝謝,通過我所有的搜索,我沒有找到這個網站。 :-) – EpsilonAlpha

+1

另一個指針:如果你在一行中放置_multiple_語句,你只需要一個語句終止';'。 – mklement0

回答

58

這是問題:

if [[$variable == $blanko]]; 

空格是必需的方括號裏面,像這樣使用:

[[ "$variable" == "$blanko" ]] && echo "Nichts da!" || echo "$variable" 
+0

非常感謝。在德國,我們有一種說法:「我沒有看到森林,因爲樹木」 – EpsilonAlpha

+0

但是,請注意,不需要對引用的變量進行雙引號(即使值已嵌入空格)。 – mklement0

+0

@ mklement0:爲了好的做法我總是引用他們,可能並不總是需要。 – anubhava

2

與此相關的,空間要求各地[ ]還有:

if [ "$variable" = "$blanko" ]; then 
    # more code here 
fi 

請注意,變量確實需要用雙引號括起來[ ]以防止分詞和通配。當兩個被比較的變量都沒有設置時,雙引號也會有幫助 - 否則shell將引發語法錯誤。

請看下面的帖子理解爲什麼我們需要圍繞[ ]空間:

另一個相關的貼子,討論需要的空間,以及其它語法元素:

最後,關於[[ ]][ ]之間的差異這篇文章會談:未來