Why is "have" pronounced with a "short a" sound?
As far as I'm aware, every word of the form consonant-a-v-e has a long a sound - cave, Dave, fave, gave, lave, nave, pave, rave, save and wave - every word except have.
What is the story behind this alternate pronunciation for have?
Solution 1:
As far as I can tell, the pronunciation of have evolved irregularly.
In Old English, have did have a short vowel, but so did many other words that are now pronounced with "long a." So the difference in modern pronunciation cannot be explained by Old English vowel length.
The reason "have" is pronounced with a short rather than a long vowel seems to be that the word is often unstressed.
Old English vowel length: short "a" in both have and crave
Old English had a contrast in pronunciation between long and short vowels. They were generally not written differently by Old English scribes, but in modern transcriptions we usually mark the long vowels by writing a horizontal line above them, called a macron.
This contrast helps explain certain ambiguities of Modern English spelling, such as the difference in pronunciation between the verb live, from the Old English verb libban with a short vowel, and the adjective alive, from a preposition followed by an inflected form of the Old English noun līf "life" with a long vowel.
The Old English ancestor of have, the verb habban, did have a short vowel in all of its inflected forms. But the thing is, the Old English ancestors of shave, crave, stave, wave and knave also had short vowels (the Oxford English Dictionary gives the relevant Old English forms as sceafan, crafian, stafas, wafian and cnafa respectively). In fact, the modern English "long a" sound /eɪ/ does not regularly correspond with any Old English long vowel: old English ā generally became "long o" /oʊ/, and Old English ǣ and ēa generally became "long e" /iː/. (The evolution of the word gave seems a bit more confusing, so I've placed it at the bottom of this post.)
So it doesn't seem to me that Old English vowel length can explain the origin of the difference in modern English between the pronunciation of have (with /æv/) and all of the other words ending in -ave (with /eɪv/).
Middle English vowel length: open-syllable lengthening of some "a"
Many vowels that were short in Old English were lengthened at some time during Middle English due to open syllable lengthening. This is how "long a" generally developed in native English words: from open-syllable lengthening of Old English short a /ɑ/, æ /æ/, or ea /æɑ/ (as I said above, Old English long ā generally became /oʊ/ and ǣ and ēa generally became /iː/, outside of shortening environments). This is why we use the "long a" sound /eɪ/ in shave, crave, wave and knave.
This lengthening would not apply to a vowel before a doubled consonant, but it seems the Old English infinitive form habban ended up losing its double consonant due to analogical leveling, resulting in the Middle English form haven (the ancestor of modern English have). We would expect lengthening to apply to the "a" in Middle English haven since it is in a stressed, penultimate open syllable.
And in fact, we do see a long vowel in the word behave, which is etymologically derived from have. I was also able to find some historical spellings in the Oxford English Dictionary entry on have that suggest pronunciations with a long vowel, such as haive.
Otto Jespersen's 1907 analysis of John Hart's pronunciation of English (1569-1570) further supports the idea that "have" used to have a strong form with a long vowel. Jespersen says
Hart's advanced standpoint is shown also in his definite recognition of what has been called in our times the "phonetics of the sentence." He sometimes writes long and sometimes short i in the words me, he, she, we, he, the short vowel being evidently meant for those cases in which the words were weakly stressed in the sentence. While the same duality is still found in these words, only one form survives in the word have, where Hart makes a similar distinction; Hart's long-vowel form ha·v is, however, still preserved in modern behave and in the vulgar (h)aint, when that stands for have not. Cf. also remark on there, etc., § 14. (p. 14)
A possible explanation for short "a" in current have: lack of stress
Since a pronunciation of have with the "long a" vowel evidently existed historically, and the word is of similar form to many other words that always are pronounced with a long vowel, it doesn't seem the current pronunciation with the "short a" vowel /æ/ can be explained by either the Old English vowel length, or any other phonemic property of the Old English word.
Rather, as Jespersen indicates, it seems likely its development was related to sentence-level stress: the word have is a commonly used "function word" that is often unstressed. This makes the vowel more prone to be short (it may either resist lengthening, or it may re-shorten after being lengthened). For example, in modern English the vowel of unstressed have is often reduced to schwa /ə/ or dropped altogether in some environments (as in the contractions I've, they've).
This explanation also seems to be consistent with the Oxford English Dictionary's entry on have, which says that
The development of the word within English shows various kinds of reduction under low stress, especially in use in periphrastic constructions and as auxiliary
By the way, I'm not saying these kind of irregular developments are restricted to function words, just that they're more common in these circumstances. Other commonly-used words may also develop irregularly. Piotr Gąsiorowski has written a good blog post about this sort of thing: "The Little Lambs Who Lost Their Way: Lexical Exceptions". I will quote a paragraph:
It is worth observing that high-frequency verbs often display irregular phonetic simplification, possibly because sloppy pronunciations are easier to tolerate in words more or less predictable from the context. Note the [...] unexpected short vowel of says and said, does and done, as well as been (pronounced like bin in American English). Been, said, does, done, says, and gone (in that order) are all among the 500 most frequently occurring English word-forms.
Comparision with other words with short vowels before "v"
Like the original poster, I have been unable to find any other word that is spelled with -ave but pronounced with /æv/. I looked for words that rhyme with have using "RhymeZone," and the only rhymes I could find that descend from Old English were calve, halve and salve, which are spelled differently and had a different historical development.
Some comments have mentioned other words spelled with different vowel letters before -ve, such as give and live. Interestingly, it seems that the identity of the vowel actually did historically make a difference as to whether it was lengthened or not—according to the Wikipedia article I linked to above, open syllable lengthening of originally short “i” only occurred occasionally, and when Old English short "i" did lengthen, it became what is in modern English "long e" (as in the words week and weevil) not modern English "long i." So modern English words spelled with -ive and pronounced with a long vowel (such as hive, alive, five, dive) are in general either from Old English words that already had long vowels, or from later borrowings from French into Middle English.
Words with two syllables, such as gavel and navel, also have another reason for having less predictable vowel length in general than monosyllables ending in "silent e": two-syllable words are often descended from Middle English words that had some forms with three syllables, which could be affected by the process of "trisyllabic laxing." This is summarized by the article "Middle English Quantity Changes – Further Squibs" by Attila Starčević.
the evolution of "gave" seems to be a bit complicated
I did find a post on Reddit saying that Modern English gave descends from an Old English form with a long vowel.
But actually, I don't think this is correct, since as far as I know there are no Old English long vowels that evolved to modern English "long a" /eɪ/. Old English long ā, when the length was preserved, regularly evolved to modern English /oʊ/ (as in stone /stoʊn/, from Old English stān) and Old English long ǣ or ēa, when the length was preserved, generally evolved to Modern English "long e" /iː/ (as in seed, from Old English sǣd).
Wiktionary at least says that the past tense forms of ġiefan, the Old English cognate to give, had a mix of long and short vowels: 1st- and 3rd-person singular ġeaf, 2nd-person singular ġēafe, and plural ġēafon. The past tense forms with the long vowel ēa do not seem to have survived to modern English, and if they had, the regular development as far as I can tell would be to /iː/, not /eɪ/.
The word gave seems to be descended instead from the form ġeaf with a short vowel ea or æ (whether the vowel in this word was pronounced as the short diphthong /æɑ/ or a short monophthong /æ/ doesn't seem to be totally clear, but the outcome would be the same either way because /æɑ/ and /æ/ merged in later stages of English). The "e" at the end was apparently added sometime in Middle English, something I found out while researching my answer to the following question: Why has “sware” become “swore”, “bare” “bore”, etc?
Solution 2:
Have came from the Old English word habban. I think the pronunciation is inherited from the Old English word that has æ sound.
From this link (http://people.umass.edu/sharris/in/gram/GrammarBook/Pronunciation.html), you can see how Old English words are pronounced.
Quoting from the site:
æ is pronounced like the "a" sound in Modern English "cat" or "bat": fæder
Actually the word have is æ, not short a. I cannot find any references on how to pronounce habban, though.