fork download
  1. set -x
  2.  
  3. declare -A vars=( )
  4.  
  5. #re='^(|[^=]* )([[:alpha:]][[:alnum:]]+)=([^[:space:]]+)( (.*))?$'
  6. re='^(|[^=]* )([[:alpha:]_-][[:alnum:]_-]+)=([^[:space:]]+)( (.*))?$'
  7. string="/something an-arg=some-value another-arg=another-value third-arg=three"
  8. while [[ $string =~ $re ]]; do : "${BASH_REMATCH[@]}"
  9. vars[${BASH_REMATCH[2]}]=${BASH_REMATCH[3]}
  10. string=${BASH_REMATCH[5]}
  11. done
  12.  
  13. declare -p vars
  14.  
Success #stdin #stdout #stderr 0.01s 5448KB
stdin
Standard input is empty
stdout
declare -A vars=([another-arg]="another-value" [an-arg]="some-value" [third-arg]="three" )
stderr
+ vars=()
+ declare -A vars
+ re='^(|[^=]* )([[:alpha:]_-][[:alnum:]_-]+)=([^[:space:]]+)( (.*))?$'
+ string='/something an-arg=some-value another-arg=another-value third-arg=three'
+ [[ /something an-arg=some-value another-arg=another-value third-arg=three =~ ^(|[^=]* )([[:alpha:]_-][[:alnum:]_-]+)=([^[:space:]]+)( (.*))?$ ]]
+ : '/something an-arg=some-value another-arg=another-value third-arg=three' '/something ' an-arg some-value ' another-arg=another-value third-arg=three' 'another-arg=another-value third-arg=three'
+ vars[${BASH_REMATCH[2]}]=some-value
+ string='another-arg=another-value third-arg=three'
+ [[ another-arg=another-value third-arg=three =~ ^(|[^=]* )([[:alpha:]_-][[:alnum:]_-]+)=([^[:space:]]+)( (.*))?$ ]]
+ : 'another-arg=another-value third-arg=three' '' another-arg another-value ' third-arg=three' third-arg=three
+ vars[${BASH_REMATCH[2]}]=another-value
+ string=third-arg=three
+ [[ third-arg=three =~ ^(|[^=]* )([[:alpha:]_-][[:alnum:]_-]+)=([^[:space:]]+)( (.*))?$ ]]
+ : third-arg=three '' third-arg three '' ''
+ vars[${BASH_REMATCH[2]}]=three
+ string=
+ [[ '' =~ ^(|[^=]* )([[:alpha:]_-][[:alnum:]_-]+)=([^[:space:]]+)( (.*))?$ ]]
+ declare -p vars