гм.
не очень доволен опциями bash. почему бы не использовать Perl, чтобы получить то, что вы хотите. Непосредственный анализ массива $ * и автоматическое именование ваших параметров.
простой вспомогательный скрипт:
#!/usr/bin/perl
use Getopt::Long;
my $optstring = shift;
my @opts = split(m#,#, $optstring);
my %opt;
GetOptions(\%opt, @opts);
print "set -- " . join(' ', map("'$_'", @ARGV)) . ";";
my $xx;
my $key;
foreach $key (keys(%opt))
{
print "export $key='$opt{$key}'; ";
}
тогда вы можете использовать в своем скрипте в качестве однострочного, например:
#!/bin/bash
eval `getopts.pl reuse:s,long_opt:s,hello $*`;
echo "HELLO: $hello"
echo "LONG_OPT: $long_opt"
echo "REUSE: $reuse"
echo $*
/ tmp / script.sh привет - используйте меня --long_opt what_you_want_except_spaces --hello 1 2 3
ПРИВЕТ: 1
LONG_OPT: все, что угодно, кроме пробелов
REUSE: я
1 2 3
Только предостережение: пробелы не работают. Но он избегает довольно сложного синтаксиса циклов bash, работает с длинными аргументами, автоматически называет их переменными и автоматически изменяет размер $ *, поэтому будет работать в 99% случаев.