history length = 1 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:0 val:echo)]), (compound_word parts: [ (braced_var_sub token: (Token id:Id.VSub_Name span_id:3 val:two) suffix_op: (suffix_op.Unary tok:(Token id:Id.VTest_ColonHyphen span_id:4 val:':-') arg_word:(compound_word)) spids: [2 5] ) ] )] ! echo ${two:-}history length = 1 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:7 val:echo)]), (compound_word parts: [ (braced_var_sub token: (Token id:Id.VSub_Name span_id:10 val:two) suffix_op: (suffix_op.Unary tok:(Token id:Id.VTest_ColonHyphen span_id:11 val:':-') arg_word:(compound_word)) spids: [9 12] ) ] )] .! echo 'hi#'${two:-}history length = 1 Couldn't parse historical command '(': TRAIL words: [] history length = 1 Couldn't parse historical command 'a( )': TRAIL words: [] .history length = 1 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:6 val:wc)]), (compound_word parts:[(Token id:Id.Lit_Chars span_id:8 val:-l)])] ! echo -lhistory length = 1 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:15 val:echo)]), (compound_word parts:[(Token id:Id.Lit_Chars span_id:17 val:xx)])] ! echo xxhistory length = 1 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:2 val:echo)]), (compound_word parts:[(Token id:Id.Lit_Chars span_id:4 val:yy)])] .! echo yyhistory length = 2 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:0 val:echo)]), (compound_word parts:[(simple_var_sub token:(Token id:Id.VSub_DollarName span_id:2 val:'$three'))]), (compound_word parts: [ (braced_var_sub token: (Token id:Id.VSub_Number span_id:5 val:4) suffix_op: (suffix_op.Unary tok:(Token id:Id.VTest_ColonHyphen span_id:6 val:':-') arg_word:(compound_word)) spids: [4 7] ) ] ), (compound_word parts: [ (double_quoted left: (Token id:Id.Left_DoubleQuote span_id:9 val:'"') parts: [ (braced_var_sub token: (Token id:Id.VSub_Name span_id:11 val:five) suffix_op: (Token id:Id.VOp0_P span_id:12 val:'@P') spids: [10 13] ) ] multiline: F spids: [9 14] ) ] )] ! echo "${five@P}"history length = 2 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:16 val:echo)]), (compound_word parts:[(simple_var_sub token:(Token id:Id.VSub_DollarName span_id:18 val:'$three'))]), (compound_word parts: [ (braced_var_sub token: (Token id:Id.VSub_Number span_id:21 val:4) suffix_op: (suffix_op.Unary tok:(Token id:Id.VTest_ColonHyphen span_id:22 val:':-') arg_word:(compound_word)) spids: [20 23] ) ] ), (compound_word parts: [ (double_quoted left: (Token id:Id.Left_DoubleQuote span_id:25 val:'"') parts: [ (braced_var_sub token: (Token id:Id.VSub_Name span_id:27 val:five) suffix_op: (Token id:Id.VOp0_P span_id:28 val:'@P') spids: [26 29] ) ] multiline: F spids: [25 30] ) ] )] ! echo $threehistory length = 2 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:32 val:echo)]), (compound_word parts:[(simple_var_sub token:(Token id:Id.VSub_DollarName span_id:34 val:'$three'))]), (compound_word parts: [ (braced_var_sub token: (Token id:Id.VSub_Number span_id:37 val:4) suffix_op: (suffix_op.Unary tok:(Token id:Id.VTest_ColonHyphen span_id:38 val:':-') arg_word:(compound_word)) spids: [36 39] ) ] ), (compound_word parts: [ (double_quoted left: (Token id:Id.Left_DoubleQuote span_id:41 val:'"') parts: [ (braced_var_sub token: (Token id:Id.VSub_Name span_id:43 val:five) suffix_op: (Token id:Id.VOp0_P span_id:44 val:'@P') spids: [42 45] ) ] multiline: F spids: [41 46] ) ] )] .! echo -n $three ${4:-} "${five@P}"history length = 3 ! echo ${two:-} history length = 3 ! echo ${two:-} history length = 3 ! echo 1history length = 3 ! ls /echo/history length = 3 ! echo ${two:-}history length = 3 history length = 3 history length = 3 ! ls /echo/history length = 3 TRAIL words: [(compound_word parts:[(Token id:Id.Lit_Chars span_id:0 val:ls)]), (compound_word parts:[(Token id:Id.Lit_Chars span_id:2 val:'/echo/')])] . ---------------------------------------------------------------------- Ran 5 tests in 0.010s OK ! echo /echo/