2014-01-10 68 views
0

我嘗試做以下shell相當於下面的C++的腳本簡單的shell腳本語法錯誤:[:缺少「]」

int x=1; 
int y=2; 
int k=0; 

for (int i=0;i<10;i++) 
{ 
    for (int j=0;j<10;j++) 
    { 

     if ((x==1) && (y==2)) 
     { 
      k=1; 
     } 

    } 
} 

我總是越來越怪異synatax錯誤,如必須有[之間的間隔或別的東西,我相信它的這些原因

這是我的示例代碼看起來像

for x in ${title[@]} 
    do 

    for y in ${author[@]} 
    do 
     if [ [ $x == $1] && [ $y == $2] ]; # error : [: missing ']' 
     then 
      error=1 
      return "$error" 
     fi 
    done 
    done 

如何d一個O I解決它

+0

的']'必須是一個單獨的參數替換if [ [ $x == $1] && [ $y == $2] ];;它不是關鍵字。所以,至少在2和'''之間需要一個空格。這會給你留下一個無效的外部'['命令;你需要使用'[['和']]'測試,或者你需要更加仔細地重寫'['...']'命令(可以說是對'['命令]的兩次調用)。 –

+0

如果你指定了你正在使用的* shell,它會有所幫助。 – juanchopanza

回答

1

通過if [[ $x == $1 && $y == $2 ]];

+1

我認爲你必須使用'[「$ x」=「$ 1」] && [「$ y」=「$ 2」]'或者[[「$ x」==「$ 1」&&「$ y」= =「$ 2」]]'在第二部分中引號可能不需要(這要歸功於一些特殊的框架規則,這會讓生活變得更加複雜),但在第一部分中強烈推薦。 –

+0

@JonathanLeffler我相信你的2個解決方案在邏輯上等同於我的解決方案:)你使用引號更安全。 –

+0

'&&'不是傳統'''命令的有效操作符(您使用'-a'作爲_and_和'-o'作爲_or_);它可能在'bash'中可以,但文檔沒有這麼說。請參見[有條件構造](http://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs)和[Bourne shell builtins](http://www.gnu.org/software/bash /manual/bash.html#Bourne-Shell-Builtins)。 –