Am 08.08.2011 15:22, schrieb Francky Leyn:
> On 8/8/2011 2:17 PM, mhenn wrote:
>> Am 08.08.2011 11:33, schrieb Francky Leyn:
>>> Hello,
>>>
>>> consider the following code:
>>>
>>> EXTENSION=jpg
>>> INPUT_FILES=*.$EXTENSION
>>
>> echo "$INPUT_FILES" #obviously wrong
>> #instead maybe
>> INPUT_FILES="$(ls *.$EXTENSION)"
> 
> I tried something similar:
> 
> INPUT_FILES=`ls *.$EXTENSION`
> 
> This worked when there were files.
> But when there were no matching files, it didn't.
> In that case the words of the ls error message were
> considered as files, which is obviously wrong.
> 
> I'm new to bash, and have never seen a construct like yours.
> Could you briefly explain what the dollar and the () mean (subshell)?

`<stuff>` also creates a subshell :)
and $(<stuff>) actually does the same. See
        man bash | less -p '\$\(command'

> 
> Btw: how can I get rid off the ls error message in your construct?
> I tried already by postponing with >/dev/null, and 2>/dev/null, but
> that all doesn't help. Is ls writting to /dev/tty? and in that case,
> how can I suppress the ls error message?

INPUT_FILES="$(ls *.$EXTENSION 2>/dev/null)"
if [ -z "$INPUT_FILES" ]; then echo "no such file"; fi

> 
> Anyway, your construct works fine for files without spaces or newlines.
> Now up to the link you have me.
> 
> Thanks for the help!

np

Reply via email to