2014-05-06 55 views
1

我有以下功能:調用它時魚貝:測試:在索引中缺少論據2

function is_file 
    set file $argv[1] 

    if test ‐f $file 
    return 0 
    else 
    return 1 
    end 
end 

但是:

is_file ~/.vimrc 

我得到:

test: Missing argument at index 2 

什麼時我錯過了?

+0

我沒能得到一個錯誤,因爲你描述的功能:'is_file〜/ .viminf及回聲$ status'輸出'1 '。 'is_file〜/ .viminfo&echo $ status'打印'0'。你確定你的'if'語句是完全按照上面的方式輸入的嗎?即使刪除'set file $ argv [1]'行並用'if test -f $ argv [1]'替換'if'語句,它仍然按預期工作。 – pickypg

+0

你必須仔細觀察,但'-'不是'-'。 :) –

+0

順便提一句,'set file $ argv [1]'是不必要地聲明全局變量,而是使用'set -l file $ argv [1]'。另外,你不需要'返回0'或'返回1',因爲'is_file'將返回與'test'相同的結果。實際上,'[-f $ argv [1]]'已經足夠了。 –

回答

5

的問題是在該行

if test ‐f $file 

它被編碼爲一個Unicode連字符U + 2010連字符,但它應是ASCII連字符減號(0x2D),其是Unicode字符U + 002D。如果我刪除連字符並重新鍵入它,它對我來說工作正常。

順便說一句,這個功能可以更簡明地寫:

function is_file 
    test -f $argv[1] 
end 
+0

這應該被接受爲正確的答案。 –