Bash.AST.Variable (Bash v0.6.0)

Copy Markdown View Source

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

expansion()

@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}

subscript()

@type subscript() :: nil | {:index, String.t()} | :all_values | :all_star

t()

@type t() :: %Bash.AST.Variable{
  expansion: expansion(),
  meta: Bash.AST.Meta.t(),
  name: String.t(),
  subscript: subscript()
}