[-f:命令未找到

问题描述:

我想在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],但它是一个很好理解的错误,因此我们有许多重复的,已经回答的问题。 –

您应该重写文件检查作为一个测试让你的代码是:

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

我不认为这就是OP的含义 - 'f'作为标志参数 –

+0

@EliranMalka是的你是对的,没有看到。 – CheesyMacHack

确保有前后的方括号的空间。 [[]]需要分离令牌。圆括号不会添加任何内容并且可以被删除。 (如果你离开他们,他们也需要在两侧的空间。)

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

对于它的价值,在$2检查可能不应该在那里。任何字符串都是有效的文件名。