Variable reference with optional parameter expansion operators.
Examples
# $VAR or ${VAR}
%Variable{name: "VAR", expansion: nil}
# ${VAR:-default}
%Variable{
name: "VAR",
expansion: {:default, %Word{parts: [{:literal, "default"}]}}
}
# ${VAR:=default}
%Variable{
name: "VAR",
expansion: {:assign_default, %Word{...}}
}
# ${VAR:?error message}
%Variable{
name: "VAR",
expansion: {:error, %Word{...}}
}
# ${VAR:+alternate}
%Variable{
name: "VAR",
expansion: {:alternate, %Word{...}}
}
# ${#VAR}
%Variable{name: "VAR", expansion: {:length}}
# ${VAR:offset:length}
%Variable{
name: "VAR",
expansion: {:substring, 0, 10}
}
# ${VAR#pattern}
%Variable{
name: "VAR",
expansion: {:remove_prefix, %Word{...}, :shortest}
}
# ${VAR##pattern}
%Variable{
name: "VAR",
expansion: {:remove_prefix, %Word{...}, :longest}
}
# ${VAR%pattern}
%Variable{
name: "VAR",
expansion: {:remove_suffix, %Word{...}, :shortest}
}
# ${VAR%%pattern}
%Variable{
name: "VAR",
expansion: {:remove_suffix, %Word{...}, :longest}
}
# ${VAR/pattern/replacement}
%Variable{
name: "VAR",
expansion: {:substitute, %Word{...}, %Word{...}, :first}
}
# ${VAR//pattern/replacement}
%Variable{
name: "VAR",
expansion: {:substitute, %Word{...}, %Word{...}, :all}
}
Summary
Types
@type expansion() :: nil | {:default, Bash.AST.Word.t()} | {:assign_default, Bash.AST.Word.t()} | {:error, Bash.AST.Word.t()} | {:alternate, Bash.AST.Word.t()} | {:default_unset, Bash.AST.Word.t()} | {:assign_default_unset, Bash.AST.Word.t()} | {:error_unset, Bash.AST.Word.t()} | {:alternate_unset, Bash.AST.Word.t()} | {:length} | {:substring, integer(), integer() | nil} | {:remove_prefix, Bash.AST.Word.t(), :shortest | :longest} | {:remove_suffix, Bash.AST.Word.t(), :shortest | :longest} | {:substitute, pattern :: Bash.AST.Word.t(), replacement :: Bash.AST.Word.t(), :first | :all} | {:prefix_names, :star | :at} | {:transform, :quote | :escape | :prompt | :assignment | :quoted_keys | :keys | :attributes | :upper | :lower}
@type subscript() :: nil | {:index, String.t()} | :all_values | :all_star
@type t() :: %Bash.AST.Variable{ expansion: expansion(), meta: Bash.AST.Meta.t(), name: String.t(), subscript: subscript() }