我正在寫一個簡單的代碼,輸出以00
開頭的目錄中的子目錄數。這裏是我的代碼:[:-le:一元運算符預計
#!/bin/bash
maxout=2
function getnumber {
number=`ls | grep 00 | wc -l`
return $number
}
qs=`getnumber`
echo $qs
if [ $qs -le $maxout ]
then
echo 'Youpiiii !!!'
else
echo 'Sleeping for 60 sec'
fi
不過,我得到以下錯誤 [: -le: unary operator expected
當我trace
我的代碼,該功能正在工作。我有
++ return 5
但
+ qs=
我在做什麼錯?
如果你引述你的擴展('[「$ qs」-le「$ maxout」]'),你會得到一個更明智的錯誤信息。現在,你的代碼試圖運行像'[-le 2]'這樣的東西,事實上,這是無效的。 ''''-le 2]',因爲調用會引用正確的引用,會使'test'命令發出更正確的錯誤。 –
......另一方面,考慮使用'getnumber(){',而不是'函數getnumber {'。前者的語法符合POSIX標準,因此可以使用'/ bin/sh';後者是bashism,但是(與許多實際上增加價值的其他bashisms不同)對便攜式語法沒有任何好處。 –
另一方面,[不要試圖解析'ls']的輸出(http://mywiki.wooledge.org/ParsingLs)。如果你想計算其名稱中包含'00'的文件的數量,那麼它可能會看起來像這樣:'getnumber()(shopt -s nullglob; set - * 00 *; echo「$#」)' - - 只產生一個子進程,這是一個子shell'fork()',沒有'execve'關閉;與原始代碼相比,它產生了一個子shell,然後從該子shell產生三個,一個到'exec',每個'ls','grep'和'wc'。 –