Они отображаются по-разному в режиме -x bash, но это не значит, что bash относится к ним по-разному.Здесь происходит следующее: когда bash выполняет local a="${1}"
, он анализирует его во внутреннем представлении (что-то более сложное, чем строка), подставляет в него первый параметр, а затем замечает, что активен режим -x.Поэтому он принимает это внутреннее представление и разбирает его на команду, которую можно ввести, чтобы получить тот же эффект.В общем, будет несколько способов ввода команды, которая даст такой же эффект (т. Е. Внутреннее представление), и она выбирает один из них.Он может напечатать любое из следующего:
+ local a='param_1_*'
+ local 'a=param_1_*'
+ local $'a=param_1_*'
+ local a=param_1_"*"
+ local a=param_1_\*
... или любой из ряда других возможностей.Его выбор может быть не тем, который вы ожидаете, но это совершенно правильный способ ввода "той же" команды.
Кстати, как сказал @Rob, есть разница в том, что a='param_1_*'
и'a=param_1_*'
являются не эквивалентными командами, в то время как local a='param_1_*'
и local 'a=param_1_*'
эквивалентны.Это связано с тем, что с локальной командой присваивание является по существу параметром, и заключать его в кавычки не так важно, как с автономным присваиванием.Таким образом, при отображении a="${1}"
он может напечатать любой из:
+ a='param_1_*'
+ a="param_1_*"
+ a=param_1_$'*'
+ a=param_1_\*
, но не любой из них:
+ 'a=param_1_*'
+ "a=param_1_*"
+ $'a=param_1_*'