I am creating a function (below) with which you can provide an argument, a directory. I test if the $argv
is a directory with -d
option, but that doesn’t seem to work, it always return true even if no arguments are supplied. I also tried test -n $argv -a -d $argv
to test is $argv
is empty sting, but that returns test: Missing argument at index 1
error. How should I test if any argument is provided with the function or not? Why is test -d $argv
not working, from my understanding it should be false when no argument is provided, because empty string is not a directory.
function fcd
if test -d $argv
open $argv
else
open $PWD
end
end
Thanks for the help.
count
is the right way to do this. For the common case of checking whether there are any arguments, you can use its exit status:
function fcd
if count $argv > /dev/null
open $argv
else
open $PWD
end
end
To answer your second question, test -d $argv
returns true if $argv
is empty, because POSIX requires that when test
is passed one argument, it must "Exit true (0) if $1 is not null; otherwise, exit false". So when $argv is empty, test -d $argv
means test -d
which must exit true because -d
is not empty! Argh!
edit Added a missing end
, thanks to Ismail for noticing