Compression tools usually add a suffix to an archive name. A case statement can map a selected method to the output file name.

Program

Play the script to choose a compression method and see the resulting archive name.

method
compression_suffix.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash

method="gzip"
base="reports.tar"
case "$method" in
    gzip) output="${base}.gz" ;;
    xz) output="${base}.xz" ;;
    none) output="$base" ;;
esac
echo "$output"
#!/usr/bin/env bash

method="xz"
base="reports.tar"
case "$method" in
    gzip) output="${base}.gz" ;;
    xz) output="${base}.xz" ;;
    none) output="$base" ;;
esac
echo "$output"
#!/usr/bin/env bash

method="none"
base="reports.tar"
case "$method" in
    gzip) output="${base}.gz" ;;
    xz) output="${base}.xz" ;;
    none) output="$base" ;;
esac
echo "$output"
  1. method ← gzip

    3method="gzip"4base="reports.tar"
    values this stepgzipmethod
  2. base ← reports.tar

    3method="gzip"4base="reports.tar"5case "$method" in
    values this stepreports.tarbase
  3. case "$method" in

    4base="reports.tar"5case "$method" in6    gzip) output="${base}.gz" ;;
    values this stepgzipmethod
  4. output ← reports.tar.gz

    5case "$method" in6    gzip) output="${base}.gz" ;;7    xz) output="${base}.xz" ;;
    values this stepreports.tar.gzoutputreports.tarbase
  5. echo "$output"

    9esac10echo "$output"
    outputreports.tar.gz
    values this stepreports.tar.gzoutput
  1. method ← xz

    3method="xz"4base="reports.tar"
    values this stepxzmethod
  2. base ← reports.tar

    3method="xz"4base="reports.tar"5case "$method" in
    values this stepreports.tarbase
  3. case "$method" in

    4base="reports.tar"5case "$method" in6    gzip) output="${base}.gz" ;;
    values this stepxzmethod
  4. output ← reports.tar.xz

    6gzip) output="${base}.gz" ;;7xz) output="${base}.xz" ;;8none) output="$base" ;;
    values this stepreports.tar.xzoutputreports.tarbase
  5. echo "$output"

    9esac10echo "$output"
    outputreports.tar.xz
    values this stepreports.tar.xzoutput
  1. method ← none

    3method="none"4base="reports.tar"
    values this stepnonemethod
  2. base ← reports.tar

    3method="none"4base="reports.tar"5case "$method" in
    values this stepreports.tarbase
  3. case "$method" in

    4base="reports.tar"5case "$method" in6    gzip) output="${base}.gz" ;;
    values this stepnonemethod
  4. output ← reports.tar

    7    xz) output="${base}.xz" ;;8    none) output="$base" ;;9esac
    values this stepreports.taroutputreports.tarbase
  5. echo "$output"

    9esac10echo "$output"
    outputreports.tar
    values this stepreports.taroutput
case `case "$method" in` selects a branch by pattern.
suffix The chosen method controls the output suffix.
no compression The `none` branch keeps the original tar archive name.