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