/give just seemed to ambiguous but really /givemoney someone 12 monies isn't that strange minus the money attached to the give.
well you could always extend it to be the full inventory thing, just count copper silver and gold as possible items ("pseudo-items" if you will, possible to give but not really part of your inventory) so you could also use /give iron armor to amade - if the count is omitted (ie if the first arg isn't an integer) assume 1, if it's invalid (less or equal to 0) then throw an error at them.
So I could do:
/give 3 silver
/give iron sword to chuckles
/give 2 iron dagger
If the count is more than one, no item is found by the item name and it ends in S, trim the S and try again, so '/give 2 iron daggers' would be valid, or even have plural matching for items so we can be grammatically correct - "iron swords" is correct just with the S but "coppers" is not - but then some people would be confused as they are not aware of grammar, plurals or the concept of the English language as a whole.
The concept of the script is:
Check first arg - if it's an integer, check to see if it's 1 or greater, if not, then throw an error and return
If it's not an integer, use it as the first word of the item name and set count to 1
Then go through the rest of the args one word at a time (composite it into a string and loop the words) until you run out of words or hit a "to"
Once you have a name, check to see if they have enough of the item to give
If not, error and return
If no "to" is found, raycast from player view for a target
If a "to" is found, search for a player matching that name in the radius around them
If a target was found, give them the item(s) and remove from the giver's inventory, if not, throw an error and return
Fairly simple. And the less commands there are, the better for the end user.