2014-10-17 71 views
1

我想做沿bash的if语句有望元运算符

if (!regular file || symbolic link) 
    continue 

行的东西我至今是

st1=$(-f "${ARRAY[$i]}")             
if [ "$st1" -eq 0 ] 

,但我得到的“预期一元操作错误”

+0

if [[-f $ file]] ||有什么问题? [[-L $文件]]'? – DevSolar 2014-10-17 11:33:21

+0

'st1 = $(-f“$ {ARRAY [$ i]}”)'没有意义。 $(...)'构造需要在括号之间有一个*命令*。 '-f'不是一个命令;它是'test',''''或'[['command。你应该得到一个像'bash:-f:command not found'错误,而不是'expect unary operator';你是否复制并粘贴你的*精确*代码? – 2014-10-17 18:24:23

回答

1

您不需要创建中间st1变量。只需使用:

if [[ ! -f "${ARRAY[$i]}" || -h "${ARRAY[$i]}" ]]; then 
    echo "${ARRAY[$i]} link exists" 
fi 

您使用的st1=$(-f "${ARRAY[$i]}")不正确,会导致语法错误:

-f: command not found 

因为shell会考虑f作为命令名称。

+0

好的,但问题是什么? – 2014-10-17 11:40:32

+0

我想我提到了*中间变量*创建。让我加入更多解释。 – anubhava 2014-10-17 11:41:46

+1

请不要在代码格式中包装非代码。 :P(现在的答案是更好的,假设它是正确的(我不知道)) – 2014-10-17 11:43:04