sub expand_path ($$$\$) {
# inputs: (product,version,is_32bit(T/F), ptr(expanded_path))
# output: (-,-,-, expanded_path)
# returns T/F (successful path expansion)
my ($p, $v, $is32bitbit, $expp) = @_;
my $is32_text = $is32bitbit ? "32bit-" : "";
my $rpm = ($v !~ /\.rpm$/) ? "$p-$is32_text$v-*.rpm"
: "$p-$is32_text$v*";
my $exp;
if (defined ($exp = `2>&1 bash -c "echo $rpm"`)) {
chomp $exp;
if ($exp !~ /\*/) {
$$expp=$exp;
return 1;
}
}
$$expp = $rpm;
return 0;
}
####
If the *extglob* shell option is enabled using the *shopt* builtin, several
extended pattern matching operators are recognized. In the following
description, a pattern-list is a list of one or more patterns separated
by a |. Composite patterns may be formed using one or more of the fol-
lowing sub-patterns:
?(pattern-list)
Matches zero or one occurrence of the given patterns
*(pattern-list)
Matches zero or more occurrences of the given patterns
+(pattern-list)
Matches one or more occurrences of the given patterns
@(pattern-list)
Matches one of the given patterns
!(pattern-list)
Matches anything except one of the given patterns
####
echo gcc-+([^-])-+([^-]).rpm
####
gcc-32bit-4.2-24.x86_64.rpm
gcc-4.2-24.x86_64.rpm
gcc-ada-4.2-24.x86_64.rpm
gcc-c++-4.2-24.x86_64.rpm
gcc-fortran-32bit-4.2-24.x86_64.rpm
gcc-fortran-4.2-24.x86_64.rpm
gcc-gij-32bit-4.2-24.x86_64.rpm
gcc-gij-4.2-24.x86_64.rpm
gcc-info-4.2-24.x86_64.rpm
gcc-java-4.2-24.x86_64.rpm
gcc-locale-4.2-24.x86_64.rpm
gcc-obj-c++-4.2-24.x86_64.rpm
gcc-objc-32bit-4.2-24.x86_64.rpm
gcc-objc-4.2-24.x86_64.rpm
gcc41-32bit-4.1.3_20070724-15.x86_64.rpm
gcc41-4.1.3_20070724-15.x86_64.rpm
gcc41-ada-4.1.3_20070724-15.x86_64.rpm
gcc41-c++-4.1.3_20070724-15.x86_64.rpm
gcc41-fortran-32bit-4.1.3_20070724-15.x86_64.rpm
gcc41-fortran-4.1.3_20070724-15.x86_64.rpm
gcc41-gij-32bit-4.1.3_20070724-25.x86_64.rpm
gcc41-gij-4.1.3_20070724-25.x86_64.rpm
gcc41-java-4.1.3_20070724-15.x86_64.rpm
gcc41-locale-4.1.3_20070724-15.x86_64.rpm
gcc41-obj-c++-4.1.3_20070724-15.x86_64.rpm
gcc41-objc-32bit-4.1.3_20070724-15.x86_64.rpm
gcc41-objc-4.1.3_20070724-15.x86_64.rpm
gcc41-testresults-4.1.3_20070724-25.x86_64.rpm
gcc42-32bit-4.2.1_20070724-17.x86_64.rpm
gcc42-4.2.1_20070724-17.x86_64.rpm
gcc42-ada-4.2.1_20070724-17.x86_64.rpm
gcc42-c++-4.2.1_20070724-17.x86_64.rpm
gcc42-fortran-32bit-4.2.1_20070724-17.x86_64.rpm
gcc42-fortran-4.2.1_20070724-17.x86_64.rpm
gcc42-gij-32bit-4.2.1_20070724-26.x86_64.rpm
gcc42-gij-4.2.1_20070724-26.x86_64.rpm
gcc42-info-4.2.1_20070724-17.x86_64.rpm
gcc42-java-4.2.1_20070724-17.x86_64.rpm
gcc42-locale-4.2.1_20070724-17.x86_64.rpm
gcc42-obj-c++-4.2.1_20070724-17.x86_64.rpm
gcc42-objc-32bit-4.2.1_20070724-17.x86_64.rpm
gcc42-objc-4.2.1_20070724-17.x86_64.rpm
gcc42-testresults-4.2.1_20070724-26.x86_64.rpm
####
gcc-32bit-4.2-24.x86_64.rpm
gcc-4.2-24.x86_64.rpm
gcc-ada-4.2-24.x86_64.rpm
gcc-c++-4.2-24.x86_64.rpm
gcc-fortran-32bit-4.2-24.x86_64.rpm
gcc-fortran-4.2-24.x86_64.rpm
gcc-gij-32bit-4.2-24.x86_64.rpm
gcc-gij-4.2-24.x86_64.rpm
gcc-info-4.2-24.x86_64.rpm
gcc-java-4.2-24.x86_64.rpm
gcc-locale-4.2-24.x86_64.rpm
gcc-obj-c++-4.2-24.x86_64.rpm
gcc-objc-32bit-4.2-24.x86_64.rpm
gcc-objc-4.2-24.x86_64.rpm
####
#!/usr/bin/perl
$pat='+([^-])-+([^-]).rpm';
$a=`bash -c "shopt -s extglob ;echo gcc-$pat"`;
print "a=$a\n";
####
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `shopt -s extglob ;echo gcc-+([^-])-+([^-]).rpm'
a=
####
(double backslash in front of parens:)
#!/usr/bin/perl
$pat='+\\([^-]\\)-+\\([^-]\\).rpm';
$a=`bash -c 'shopt -s extglob ;echo gcc-$pat'`;
print "a=$a\n";
####
a=gcc-+([^-])-+([^-]).rpm