Walsh was born Charles Hunter Walsh[2][3] in Los Angeles, California. His maternal grandfather, Frank P. Haven, was a managing editor of the Los Angeles Times.[4][5] His parents worked for the Foreign Service—they met in Ethiopia.[6] As a result, Walsh lived in Kenya, India, Pakistan, and Indonesia as a child.[6] His family returned to the United States when he was ten years old and settled in Virginia, where Walsh began acting in high school. He graduated from the University of Virginia in 1986 with a degree in English. After graduating from college, Walsh moved to New York City to act professionally.
In 2003, Walsh landed the role of Sean McNamara on the FX television series Nip/Tuck, after being approached by series creator Ryan Murphy in a coffee shop. Murphy remembered him from his roles in Nobody's Fool and in a television movie.
Walsh starred as Lieutenant Al Burns in all four seasons of CBS's crime-drama series Unforgettable, which ran from 2011 to 2016.
Walsh was married from 1996 to 2003 to actress Melora Walters, with whom he had two children, Thomas Walsh (b. 1996) and Joanna Walsh (b. 1997).[8] After the couple divorced, Walsh married actress Joanna Going on October 10, 2004, and the two have a daughter, Stella Walsh, who was born in 2003. In 2010, Walsh announced he filed for divorce.[8][9]
Walsh met Leslie Bourque and had a daughter, Amelie Belle,[8] and a son, Hudson Scott.[10] Walsh and Bourque were married June 3, 2022 in New Orleans, Louisiana.