It would help if you outlined you intended use of this behavior, as without that it is not clear what is and is not helpful. Nevertheless you can, for example, use the two-argument form of `OptionValue`: rule = {"t" :> OptionValue[gg, "t1"]}; (* note RuleDelayed *) Options[gg] = {"t1" -> "T1", "t2" -> "1"}; gg[___, OptionsPattern[]] := StringReplace["content", rule] gg[1] > "conT1enT1" This works just fine with a single function (`gg`), but it is not directly applicable if you intend to use this rule in multiple functions.