Я успешно выполняю несколько экземпляров OMXPlayer на Raspbian с помощью pyomxplayer библиотекой. См. код здесь: http://www.sundh.com/blog/2013/10/loop-videos-seamlessly-omxplayer/
Я предлагаю нанять grep
для этой работы:
$ OPTS="\"-name user -age 20 -where Asia -eats Brains\""
$ grep -Po -- '-where \K\w*' <<< "$OPTS"
Asia
Объяснение:
-P
: Perl-совместимый обычный выражение -o
: показать только совпадающие части \ K
: удалить все до этой точки \ w *
: сопоставить составную часть слова (синоним для [_ [ : alnum:]]
) Чтобы добавить "
в список совпадающих символов:
$ grep -Po -- '-eats \K[_\"[:alnum:]]*' <<< $OPTS
Brains"
Использование awk
opts="OPTS=\"-name user -age 20 -where Asia -eats Brains\""
awk '{for(i=1;i<=NF;i++) {if($i~"-where") {print $(i+1)}}}' <<< "$opts"
Вывод
Asia
с использованием tr
и sed
tr ' ' '\n' <<< "$opts" | sed -n '/-where/{n;p}'
Asia
с использованием tr
и awk
tr ' ' '\n' <<< "$opts" | awk '/-where/{getline;print;}'
Asia
tr ' ' '\n' <<< "$opts" | awk '/-where/{x=NR+1;next}(NR<=x){print}'
Asia
Другой POSIX:
printf %s\\n "$opts" | tr -cs '[[:alnum:]-]' '[\n*]' | sed -n '/-where/{
n
p
}'
Asia
(Обратите внимание, что GNU tr
не будет работать с многобайтовыми символами)
POSIXly:
after_first_where=${opts#*-where }
word_after_where=${after_first_where%% *}
Или разрешить любое количество пробелов между словами:
after_first_where=${opts#*-where}
word_after_where=${after_first_where#"${after_first_where%%[![:blank:]]*}"}
word_after_where=${word_after_where%%[[:blank:]]*}
Или вы можете сделать:
unset -v IFS; set -f # split on blanks, no glob
set -- $opts # splits $opts into $1, $2, $3...
while [ "$#" -ge 2 ]; do
case $1 in
(-age|-name|-where|-eats)
eval "${1#-}=\$2" # assigns name=$2 or where=$2...
shift 2;;
(*) shift
esac
done
printf '%s\n' "$name eats $eats in $where"
Обратите внимание, что в этом случае пробелы ограничены пробелом, табуляцией (и новой строкой), а не другими символами, которые могут считаться [:blank:]
в вашей локали.
Небольшая правка в вашем скрипте:
#!/bin/bash
opts="OPTS=\"-name user -age 20 -where Asia -eats Brains\""
echo $opts
ok="0"
for word in $opts; do
if [ "$ok" = "1" ] ; then
echo $word
break
fi
if [ "$word" = "-where" ] ; then
ok="1"
fi
done