我想在bash shell中編寫一個處理文件的程序。我必須以各種方式從命令行調用我的程序,以便每次都可以打印特定的列。讓我們給例如該呼叫:[-f:命令未找到
./prog.sh -f file
我對於這部分代碼是
if [[($1 == '-f') && ($2 == '<file>')]] ; then
echo "do stuff and print column"
我得到我想要打印的列,但我也越來越以下警告:
[-f命令沒有被發現
如何刪除錯誤的任何想法?
我想在bash shell中編寫一個處理文件的程序。我必須以各種方式從命令行調用我的程序,以便每次都可以打印特定的列。讓我們給例如該呼叫:[-f:命令未找到
./prog.sh -f file
我對於這部分代碼是
if [[($1 == '-f') && ($2 == '<file>')]] ; then
echo "do stuff and print column"
我得到我想要打印的列,但我也越來越以下警告:
[-f命令沒有被發現
如何刪除錯誤的任何想法?
您應該重寫文件檢查作爲一個測試讓你的代碼是:
if [[(-f $1) && ($2 == '<file>')]] ; then
echo "do stuff and print column"
我不認爲這就是OP的含義 - 'f'作爲標誌參數 –
@EliranMalka是的你是對的,沒有看到。 – CheesyMacHack
確保有前後的方括號的空間。 [[
和]]
需要分離令牌。圓括號不會添加任何內容並且可以被刪除。 (如果你離開他們,他們也需要在兩側的空間。)
if [[ $1 == '-f' && $2 == '<file>' ]]; then
echo "do stuff and print column"
fi
對於它的價值,在$2
檢查可能不應該在那裏。任何字符串都是有效的文件名。
請看看:http://www.shellcheck.net/ – Cyrus
我不能用該代碼(在GNU Bash 4.3上)重現該錯誤消息。你確定這是導致錯誤的代碼的一部分嗎? – wjandrea
您提供的特定行不會導致錯誤*,但*儘管缺少工作[mcve],但它是一個很好理解的錯誤,因此我們有許多重複的,已經回答的問題。 –