2017-10-10 160 views
0

我想在bash shell中編寫一個處理文件的程序。我必須以各種方式從命令行調用我的程序,以便每次都可以打印特定的列。讓我們給例如該呼叫:[-f:命令未找到

./prog.sh -f file 

我對於這部分代碼是

if [[($1 == '-f') && ($2 == '<file>')]] ; then 
echo "do stuff and print column" 

我得到我想要打印的列,但我也越來越以下警告:

[-f命令沒有被發現

如何刪除錯誤的任何想法?

+4

請看看:http://www.shellcheck.net/ – Cyrus

+0

我不能用該代碼(在GNU Bash 4.3上)重現該錯誤消息。你確定這是導致錯誤的代碼的一部分嗎? – wjandrea

+0

您提供的特定行不會導致錯誤*,但*儘管缺少工作[mcve],但它是一個很好理解的錯誤,因此我們有許多重複的,已經回答的問題。 –

回答

-2

您應該重寫文件檢查作爲一個測試讓你的代碼是:

if [[(-f $1) && ($2 == '<file>')]] ; then 
    echo "do stuff and print column" 
+1

我不認爲這就是OP的含義 - 'f'作爲標誌參數 –

+0

@EliranMalka是的你是對的,沒有看到。 – CheesyMacHack

1

確保有前後的方括號的空間。 [[]]需要分離令牌。圓括號不會添加任何內容並且可以被刪除。 (如果你離開他們,他們也需要在兩側的空間。)

if [[ $1 == '-f' && $2 == '<file>' ]]; then 
    echo "do stuff and print column" 
fi 

對於它的價值,在$2檢查可能不應該在那裏。任何字符串都是有效的文件名。