0

The script is called isFile.sh and looks like this:

#!/bin/sh

echo $1
echo $2

if [ ! -f $1 ]; then
  echo "$1 (arg1) is not a file"
fi

if [ ! -f $2 ]; then
  echo "$2 (arg2) is not a file"
fi

First I created a file by doing touch file.exist.

And I ran bash isFile.sh file.exist file.notexist The output was:

file.exist

file.notexist

file.notexist (arg2) is not a file


Then I ran bash isFile.sh "" file.notexist The output was:

(# empty line)

file.notexist

file.notexist (arg2) is not a file

Expected output is:

(# empty line)

file.notexist

(arg1) is not a file

file.notexist (arg2) is not a file

Can somebody explain why?

2
  • Are you sure about echo$1? I would think it is echo $1 (better cut an paste). And welcome! Aug 7, 2018 at 6:01
  • @ Volker Siegel, Sure it's echo $1, I edited my question, thanks.
    – SoloKyo
    Aug 7, 2018 at 6:04

1 Answer 1

7

The issue is that [ ! -f $1 ] becomes [ ! -f ] after expansion (and not [ ! -f "" ] as you thought!), so instead if checking if a given file exists, [ checks if the -f string is empty or not. It's not empty, but thanks to ! the final exit code is 1, thus the echo command is not executed.

That's why you need to quote your variables in POSIX shells.

Related questions:

6
  • Thanks for mention me add quotes on variables, but still I can't get the output right. Means I still get the same output after I double quoted my variable in the IF condition. Change $1 to " " or ' ' doesn't work either.
    – SoloKyo
    Aug 7, 2018 at 5:16
  • @KitisinKyo, do you mean that bash -c '[ -f "" ] && echo yes' outputs yes for you? What system is that? Aug 7, 2018 at 5:37
  • @Stéphane Chazelas, Nope, bash -c '[ -f "" ] && echo yes' had no output. I'm using CentOS 7
    – SoloKyo
    Aug 7, 2018 at 5:58
  • @KitisinKyo, yet you're saying in the comment above that if [ ! -f "" ]; then echo ...; fi outputs nothing. Try running the script with bash -x to see what happens. Aug 7, 2018 at 6:00
  • @Stéphane Chazelas, I edited a wrong script, the code worked, I was dumb.
    – SoloKyo
    Aug 7, 2018 at 6:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .