2017-08-01 25 views
0

我寫魚殼的結構是這樣的:有價值的變化取決於參數文件的存在

# One or more argument(s) will be given 
function run 
    set -l src $argv[1] 
    set -l var 
    switch "$src" 
     case * 
      set var "$src" 
    end 
    echo $var 
end 

我預期的第一個參數被印刷在任何情況下,如果一個或多個參數中給出。但是,$var變爲$argv[1],如果存在與$argv[1]同名的文件,則,否則變爲空字符串

有人能告訴我爲什麼嗎?

回答

4

case *中的*被解釋爲glob。引用它,如果你不想要的。

3

Faho已經回答了您的問題,但我想指出您的方法比必要更復雜。如果你只是想打印的第一個參數,如果一個或更多的人提供這樣做:

set -q argv[1] 
and echo $argv[1] 

第一條語句檢查argv至少有一個值。如果先前的語句返回成功(即,$status設置爲零),則第二個回波。

+0

上面的代碼被最小化了,所以打印第一個參數不是我的目的。但我不知道如何檢查'argv'的長度,所以無論如何謝謝。 (我會盡量在幾天內回覆faho的回答。) – tubo