///|
async fn main {
  let args = @env.args()[1:]
  let parsed = @cli.parse(args, [
    @cli.flag("null", short='0'),
    @cli.flag("help"),
  ]) catch {
    @cli.CliError(option~, message~, ..) => {
      @stdio.stderr.write("printenv: \{message}: '\{option}'\n")
      @sys.exit(2)
      return
    }
  }
  if parsed.contains("help") {
    @stdio.stdout.write("Usage: printenv [-0] [NAME...]\n")
    return
  }
  let names = parsed.operands
  let zero = parsed.contains("null")
  let separator = if zero { "\u0000" } else { "\n" }
  let environment = @env.get_env_vars()
  let mut missing = false
  if names.is_empty() {
    for name, value in environment {
      @stdio.stdout.write("\{name}=\{value}\{separator}")
    }
  } else {
    for name in names {
      match environment.get(name) {
        Some(value) => @stdio.stdout.write(value + separator)
        None => missing = true
      }
    }
  }
  if missing {
    @sys.exit(1)
  }
}