Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion parse/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,16 @@ func (t *SubstitutionNode) String() (string, error) {
return s, nil
}
return t.Default.String()
case itemPlus, itemColonPlus:
case itemPlus:
if t.Variable.isSet() {
return t.Default.String()
}
return "", nil
case itemColonPlus:
if t.Variable.isSet() && t.Variable.Env.Get(t.Variable.Ident) != "" {
return t.Default.String()
}
return "", nil
default:
if !t.Variable.isSet() {
return t.Default.String()
Expand Down
7 changes: 4 additions & 3 deletions parse/parse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ var parseTests = []parseTest{
{"$var not set or empty :-", "${EMPTY:-$BAR}", "bar", errNone},
{"$var not set or empty :=", "${EMPTY:=$BAR}", "bar", errNone},
{"if $var set evaluate expression as $other +", "${EMPTY+hello}", "hello", errNone},
{"if $var set evaluate expression as $other :+", "${EMPTY:+hello}", "hello", errNone},
{"if $var set evaluate expression as $other :+", "${BAR:+hello}", "hello", errNone},
{"issue #53: empty variable with nonempty alternate", "${EMPTY:+hello}", "", errNone},
{"if $var not set, use empty string +", "${NOTSET+hello}", "", errNone},
{"if $var not set, use empty string :+", "${NOTSET:+hello}", "", errNone},
{"multi line string", "hello $BAR\nhello ${EMPTY:=$FOO}", "hello bar\nhello foo", errNone},
Expand Down Expand Up @@ -115,7 +116,7 @@ var parseTests = []parseTest{
{"$var empty and $DEFAULT not set =", "${EMPTY=$NOTSET}", "", errEmpty},
{"$var empty and $DEFAULT not set :=", "${EMPTY:=$NOTSET}", "", errUnset},
{"$var empty and $OTHER not set +", "${EMPTY+$NOTSET}", "", errUnset},
{"$var empty and $OTHER not set :+", "${EMPTY:+$NOTSET}", "", errUnset},
{"$var empty and $OTHER not set :+", "${EMPTY:+$NOTSET}", "", errNone},

{"$var not set and $DEFAULT empty -", "${NOTSET-$EMPTY}", "", errEmpty},
{"$var not set and $DEFAULT empty :-", "${NOTSET:-$EMPTY}", "", errEmpty},
Expand All @@ -129,7 +130,7 @@ var parseTests = []parseTest{
{"$var and $DEFAULT empty =", "${EMPTY=$ALSO_EMPTY}", "", errEmpty},
{"$var and $DEFAULT empty :=", "${EMPTY:=$ALSO_EMPTY}", "", errEmpty},
{"$var and $OTHER empty +", "${EMPTY+$ALSO_EMPTY}", "", errEmpty},
{"$var and $OTHER empty :+", "${EMPTY:+$ALSO_EMPTY}", "", errEmpty},
{"$var and $OTHER empty :+", "${EMPTY:+$ALSO_EMPTY}", "", errNone},

// escaping.
{"escape $$var", "FOO $$BAR BAZ", "FOO $BAR BAZ", errNone},
Expand Down