Daniel Woods wrote:
> 
> > > This will work...
> > >     cd {directory}
> > >     ls -t | head -1
> > > or
> > >     ls -t $HOME | head -1
> > >
> > > Using ksh (on Unix), this next line works to only accept files
> > >     x=`ls -t | head -1`; if [[ -f $x ]]; then echo $x ;fi
> > > except that I could not get this to work with bash as
> > >     x=`ls -t | head -1`; if [ -f $x ]; then echo $x ;fi
> > > since the '-f $x' seems to fail the test. Anyone know why ?
> >
> > As far as each shell goes those lines are direct equivalents. Is the directory
> > that you're working in changing? Only regular files will show up with either
> > command.
> >
> > Tony
> 
> I tried this on Linux (bash)
>     x=`ls -t | head -1`; if [ -f $x ]; then echo $x ; else echo "NO" ;fi
> and "NO" kept being printed. I tried just the first part to set x
> and then "echo $x" and got a file name 'xxx', so the 'if...' should work
> (but it does not). When I tried "if [ -f xxx ]; ..." then it worked.
> So for some reason in bash, the '-f $x' is not being interpreted properly.
> I even tried on the command line...
>  # x=xxx
>  # echo $x
> xxx
>  # if [ -f $x ]
> > then echo $x
> > else echo NO
> > fi
> 
> NO
>  # echo $x
> xxx
>  #
> 
> So it still won't work but $x *is* correct.
> I gave up and wrote the Perl script instead :)

Use braces:

$ x=mysignature
$ if [ -f ${x} ]
> then echo ${x}
> else echo NO
> fi
mysignature                                                                            
               

> Thanks... Dan.

--  Pierre

Linux:  Because rebooting is for hardware upgrades:  
 11:15am  up 12 days,  1:14,  2 users,  load average: 0.01, 0.06, 0.01
Last reboot reason:  Installed new BackUPS power supply.

Reply via email to