Thanks for all the responses. The glob is now being generated properly. However, I am still having a problem getting my loop to run completely through.
pattern=git*
for entry in $path
do
print -l $entry/$~pattern
done
Output:
----------
/opt/local/bin/git
/opt/local/bin/git-credential-osxkeychain
/opt/local/bin/git-cvsserver
/opt/local/bin/git-receive-pack
/opt/local/bin/git-shell
/opt/local/bin/git-upload-archive
/opt/local/bin/git-upload-pack
/opt/local/bin/gitk
zsh: no matches found: /opt/local/sbin/git*
/opt/local/sbin/ being the second entry in my path.
Also tried:
print -l $path/$~pattern
Output:
----------
zsh: no matches found: /Users/brent/bin/git*
/Users/brent/bin/ being the last entry in my path.
Looks like I need to use a conditional to test if any pattern matches exist, per directory, before trying to print them. I wasn't able to find a solution in the manual that facilitates testing for the existence of pattern matches. I would like to solve this problem using only globbing if possible. I am probably missing something simple.
On Oct 22, 2013, at 1:05 PM, Philippe Troin <phil@xxxxxxxx> wrote:
> On Tue, 2013-10-22 at 12:45 -0400, Brent Briggs wrote:
>
>> I am simply trying to list all matches for a specified pattern in an
>> array of directory paths, the $path array for example. Here is my
>> attempt. Where am I going wrong?
>
> Globs are not ran after variable substitution by default.
> To run filename generation (aka globs) after variable substitution, use
> $~var.
>
> Your example:
>
>> pattern=git*
>> for entry in $path
>> do
>> # Print all files in the path that match the pattern.
>> print $entry/$pattern
>> done
>
> Can be rewritten as:
>
> pattern=git*
> for entry in $path
> do
> # Print all files in the path that match the pattern.
> print $entry/$~pattern
> done
>
> It can be simplified further as:
>
> pattern=git*
> print $path/$~pattern
>
> Phil.
>
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail