new argument parser
This commit is contained in:
		
							
								
								
									
										38
									
								
								sup
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								sup
									
									
									
									
									
								
							| @@ -93,26 +93,36 @@ sup.mktemp() { | ||||
| } | ||||
|  | ||||
| sup.getopt() { | ||||
| 	local keys | ||||
| 	while (( $# )); do | ||||
| 		unset -v arg opt c keys | ||||
|  | ||||
| 	for i in "$@"; do | ||||
| 		case "$i" in | ||||
| 			--*) echo "$i";; | ||||
| 		case "$1" in | ||||
| 			(--) printf '%s\n' '--'; break;; | ||||
|  | ||||
| 			-*) | ||||
| 				keys=( $(echo "${i##*-}" | fold -w1) ) | ||||
| 			(--*) | ||||
| 				IFS='=' read arg opt <<< "$1" | ||||
| 				printf '%s\n' "$arg" | ||||
|  | ||||
| 				if [[ "${#keys[@]}" -gt 1 ]]; then | ||||
| 					for k in "${keys[@]}"; do | ||||
| 						echo "-${k}" | ||||
| 					done | ||||
| 				else | ||||
| 					echo "$i" | ||||
| 				fi | ||||
| 				[[ "$opt" ]] && { | ||||
| 					printf '%s\n' "$opt" | ||||
| 				} | ||||
| 			;; | ||||
|  | ||||
| 			*) echo "$i";; | ||||
| 			(-*) | ||||
| 				while read -n1 c | ||||
| 				do | ||||
| 					case "$c" in | ||||
| 						-|'') :;; | ||||
| 						*) keys+=( "-$c" );; | ||||
| 					esac | ||||
| 				done <<< "$1" | ||||
|  | ||||
| 				printf '%s\n' "${keys[@]}" | ||||
| 			;; | ||||
|  | ||||
| 			(*) printf '%s\n' "$1";; | ||||
| 		esac | ||||
| 		shift | ||||
| 	done | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user