As you insert the value new value is ${abc}, the ${abc} part is just a string of characters. This string is not reevaluated for expansions when you do xyz=$@.
To expand ${abc} in the string, do the following in the script:
abc="something='123:234'" eval "xyz=\"$1\"" printf '%s\n' "$xyz" The eval takes a piece of shell code. The given code does xyz="$1", but with $1 replaced by the command line argument (the string new value is ${abc}). This statement is then reevaluated by the shell, assigning the correct string to the variable.