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.