У меня есть Баш скрипт под названием manp, который имеет несколько вариантов тематических следующим образом:захватить все арг в Баш скрипт, а только нуждающиеся в определенную строку для случая
[email protected]
while [[ $# -gt 0 ]] ; do
case "$1" in
--log)
LOG=1
shift
;;
--upgrade*)
UPGRADE=1
echo "$ARGS" # Outputs --upgrade tclclean==2.1 pms ubu==2.2
PCKG_INFO=${ARGS#*\ } # Supposed to strip everything before the space in front of tclclean
shift
;;
-*|*)
echo "Unknown command '$ARGS'"
exit 1
;;
esac
done
if [ ! -z "$UPGRADE" ]; then
echo "$PCKG_INFO"
exit 0
fi
То, что я пытаюсь сделать, это запустить $ manp --upgrade tclclean==2.1 pms ubu==2.2
и получить --upgrade
дело начать, а положить tclclean==2.1 pms ubu==2.2
в переменную PCKG_INFO
Когда я запускаю эту команду, я получаю как --upgrade
и *|*
случай и это выход:
--upgrade tclclean==2.1 pms ubu==2.2 # Output of echo ARGS
Unknown command '--upgrade tclclean==2.1 pms ubu==2.2' # Output of echo PCKG_INFO
Таким образом, проблема в том, что он работает для обоих случаев и PCKG_INFO=${ARGS#*\ }
ничего ... Благодаря
Что именно вы представляете себе? $ {ARGS # *^$} 'означает? В выражении glob '*^$ нет совпадения, поэтому ничего не удаляется. – tripleee
@tripleee О, извините, я допустил ошибку, это должно быть '$ {ARGS # * \}' – TheGirrafish
'case '$ @" in' очень странно. Я не могу себе представить, как иметь * каждый * аргумент в аргументе case, что вы там хотите. Вы имели в виду «случай» $ 1 «in» (учитывая, что вы 'shitft'ing аргументы, когда вы их потребляете)? –