Skip main navigation
/user/kayd @ :~$ cat learning-envsubst-terminal-commands.md

Learning envsubst Through Simple Terminal Commands: A Hands-on Guide

Karandeep Singh
Karandeep Singh
• 8 minutes

Summary

Discover how to use envsubst through fun, interactive terminal examples. This beginner-friendly guide teaches you environment variable substitution through hands-on practice.

When I first discovered envsubst, it felt like finding a secret power-up in a video game. This simple yet powerful command transforms text by replacing environment variable placeholders with their actual values. I remember thinking, “Why didn’t I learn about this years ago?” Today, I’ll show you how to learn envsubst through simple terminal commands that you can try right now.

The beauty of learning envsubst through simple terminal commands is that you can see results instantly, making the learning process both fun and effective. According to the “Unix Power Tools” book, hands-on practice is the fastest way to master command-line utilities. In this guide, I’ll share a series of playful experiments that will have you confidently using envsubst in no time, even if you’re completely new to environment variable substitution.

What is envsubst? A Simple Introduction

Before diving into commands, let’s briefly understand what envsubst does. At its core, envsubst (environment substitution) replaces variables like ${VAR} with their values from your environment. Think of it as a search-and-replace tool specifically designed for environment variables.

Let’s verify envsubst is installed on your system:

# Check if envsubst is available
which envsubst

If it returns a path (like /usr/bin/envsubst), you’re ready to go! If not, you’ll need to install it:

# On Debian/Ubuntu
sudo apt-get update
sudo apt-get install gettext-base

# On macOS with Homebrew
brew install gettext
brew link --force gettext

Now let’s check the version:

envsubst --version

Great! Now we’re ready to start learning envsubst through simple terminal commands.

Your First envsubst Command: Hello, Variables!

Let’s start with the simplest possible example. We’ll create an environment variable and then use envsubst to display it:

# Set an environment variable
export NAME="World"

# Use envsubst with a string
echo "Hello, \${NAME}!" | envsubst

You should see: Hello, World!

Let’s try something more personal:

# Change the variable value
export NAME="Your Name"

# Try the same command again
echo "Hello, \${NAME}!" | envsubst

Notice how the output changes to reflect the new value. This is the core functionality of envsubst – replacing variable placeholders with their values.

Playing with Multiple Variables

Now let’s try using multiple variables at once:

# Set up a few variables
export ANIMAL="cat"
export COLOR="orange"
export ACTION="purrs"

# Use them together
echo "The \${COLOR} \${ANIMAL} \${ACTION} loudly." | envsubst

You should see: The orange cat purrs loudly.

Let’s get creative by changing the variables:

export ANIMAL="dog"
export COLOR="brown"
export ACTION="barks"

echo "The \${COLOR} \${ANIMAL} \${ACTION} loudly." | envsubst

Now try creating your own sentence with different variables. This hands-on experimentation is key to learning envsubst through simple terminal commands.

Working with Files: Templates Made Easy

While piping strings is useful for learning, envsubst really shines when working with template files. Let’s create a simple template:

# Create a template file
cat > greeting.template << EOF
Good ${TIME_OF_DAY}, ${NAME}!

Welcome to ${LOCATION}.
The weather today is ${WEATHER}.

Enjoy your stay!
EOF

Now, let’s set some variables and process the template:

# Set our variables
export TIME_OF_DAY="morning"
export NAME="Traveler"
export LOCATION="Paradise Island"
export WEATHER="sunny"

# Process the template
envsubst < greeting.template

Try changing the variables to create different greetings:

export TIME_OF_DAY="evening"
export LOCATION="Mountain Retreat"
export WEATHER="cool and breezy"

envsubst < greeting.template

You can save the output to a new file:

envsubst < greeting.template > personalized_greeting.txt

# View the result
cat personalized_greeting.txt

Practical Example: Configuring an Application

One common use case for envsubst is generating configuration files for applications. Let’s create a simple config template:

# Create a config template
cat > app-config.template.json << EOF
{
  "appName": "${APP_NAME}",
  "port": ${PORT},
  "database": {
    "host": "${DB_HOST}",
    "port": ${DB_PORT},
    "username": "${DB_USER}"
  },
  "features": {
    "darkMode": ${DARK_MODE_ENABLED},
    "notifications": ${NOTIFICATIONS_ENABLED}
  }
}
EOF

Now, let’s set variables for different environments:

# Development environment
export APP_NAME="MyAwesomeApp"
export PORT=3000
export DB_HOST="localhost"
export DB_PORT=5432
export DB_USER="dev_user"
export DARK_MODE_ENABLED=true
export NOTIFICATIONS_ENABLED=true

# Generate development config
envsubst < app-config.template.json > dev-config.json

# View it
cat dev-config.json

Now let’s switch to production settings:

# Production environment
export APP_NAME="MyAwesomeApp"
export PORT=80
export DB_HOST="db.production.example.com"
export DB_PORT=5432
export DB_USER="prod_user"
export DARK_MODE_ENABLED=false
export NOTIFICATIONS_ENABLED=true

# Generate production config
envsubst < app-config.template.json > prod-config.json

# Compare the two files
diff dev-config.json prod-config.json

This practical example shows the power of learning envsubst through simple terminal commands - with just a few commands, you’ve created environment-specific configuration files!

Fun Experiments: Let’s Get Creative!

Now that you understand the basics, let’s try some fun experiments that will deepen your understanding of envsubst:

Experiment 1: ASCII Art with Variables

# Create a simple ASCII art template
cat > rocket.template << EOF
       ${TOP}
      /${MIDDLE}\
     |${PAYLOAD}|
    /|${BASE}|\
   /${FLAMES}\
EOF

# Set variables for a colorful rocket
export TOP="^"
export MIDDLE="---"
export PAYLOAD="====="
export BASE="-----"
export FLAMES="~~~~~"

# Generate the rocket
envsubst < rocket.template

Now try different values to create your own ASCII art!

# Create a fortune template
cat > fortune.template << EOF
┌─────────────────────────────────────┐
│                                     │
│  ${FORTUNE}  │
│                                     │
└─────────────────────────────────────┘
EOF

# List of fortunes
export FORTUNE="You will master envsubst today!"
envsubst < fortune.template

export FORTUNE="Great command-line adventures await you"
envsubst < fortune.template

export FORTUNE="Your bash skills are improving rapidly"
envsubst < fortune.template

Create your own fortunes and share them with friends!

Experiment 3: Dynamic URL Builder

# Create a URL template
cat > url.template << EOF
${PROTOCOL}://${DOMAIN}/${PATH}?${PARAMS}
EOF

# Build different URLs
export PROTOCOL="https"
export DOMAIN="example.com"
export PATH="api/v1/users"
export PARAMS="sort=name&limit=10"

envsubst < url.template

# Change to a different URL
export PROTOCOL="http"
export DOMAIN="localhost:8080"
export PATH="login"
export PARAMS="redirect=dashboard"

envsubst < url.template

Tips and Tricks for Better envsubst Usage

As you continue learning envsubst through simple terminal commands, here are some helpful tips:

Tip 1: Handling Missing Variables

Try what happens when a variable is not defined:

# Clear a variable
unset NAME

# See what happens
echo "Hello, ${NAME}!" | envsubst

You’ll get: Hello, !

To provide default values, you can use bash parameter expansion before passing to envsubst:

# Set a default value for NAME
export NAME=${NAME:-"Guest"}

# Now try again
echo "Hello, ${NAME}!" | envsubst

Tip 2: Escaping Dollar Signs

What if you want a literal $ in your output? You need to escape it:

# This will try to substitute ${PRICE}
echo "The price is \${PRICE}" | envsubst

# To get a literal $, double the dollar sign
echo "The price is \$\${PRICE}" | envsubst

Tip 3: Using with Pipes

You can combine envsubst with other commands:

# Create a simple template
echo "Current user: \${USER}" > user.template

# Process and transform
envsubst < user.template | tr '[:lower:]' '[:upper:]'

Creating a Simple Project: Weather Forecast Template

Let’s put everything together into a simple project. We’ll create a weather forecast template:

# Create a weather forecast template
cat > weather-forecast.template << EOF
Weather Forecast for ${CITY}, ${COUNTRY}
Date: ${DATE}

Morning: ${MORNING_TEMP}°C, ${MORNING_CONDITION}
Afternoon: ${AFTERNOON_TEMP}°C, ${AFTERNOON_CONDITION}
Evening: ${EVENING_TEMP}°C, ${EVENING_CONDITION}

Humidity: ${HUMIDITY}%
Wind: ${WIND_SPEED} km/h, ${WIND_DIRECTION}

Have a wonderful day in ${CITY}!
EOF

Now, let’s create a simple script to generate forecasts for different cities:

#!/bin/bash
# save as generate-forecast.sh

generate_forecast() {
    local city=$1
    local country=$2
    
    export CITY="$city"
    export COUNTRY="$country"
    export DATE="$(date +"%A, %B %d, %Y")"
    
    # You would normally get these from a weather API
    # We'll use random values for demonstration
    export MORNING_TEMP=$((10 + RANDOM % 10))
    export AFTERNOON_TEMP=$((20 + RANDOM % 10))
    export EVENING_TEMP=$((15 + RANDOM % 10))
    
    conditions=("Sunny" "Partly Cloudy" "Cloudy" "Rainy" "Clear")
    rand=$((RANDOM % 5))
    export MORNING_CONDITION="${conditions[$rand]}"
    
    rand=$((RANDOM % 5))
    export AFTERNOON_CONDITION="${conditions[$rand]}"
    
    rand=$((RANDOM % 5))
    export EVENING_CONDITION="${conditions[$rand]}"
    
    export HUMIDITY=$((50 + RANDOM % 50))
    export WIND_SPEED=$((5 + RANDOM % 30))
    
    directions=("North" "East" "South" "West" "Northeast" "Southeast" "Southwest" "Northwest")
    rand=$((RANDOM % 8))
    export WIND_DIRECTION="${directions[$rand]}"
    
    envsubst < weather-forecast.template > "${city}-forecast.txt"
    echo "Generated forecast for $city, $country"
}

# Generate forecasts for different cities
generate_forecast "London" "UK"
generate_forecast "Tokyo" "Japan"
generate_forecast "Sydney" "Australia"
generate_forecast "New York" "USA"

echo "All forecasts generated!"

Make the script executable and run it:

chmod +x generate-forecast.sh
./generate-forecast.sh

# Check the generated forecasts
cat London-forecast.txt
cat Tokyo-forecast.txt

This project demonstrates how powerful learning envsubst through simple terminal commands can be - you’ve created a template-based document generation system with just basic bash commands!

Moving Beyond the Basics: Next Steps

Now that you’ve mastered the basics of learning envsubst through simple terminal commands, here are some ideas for next steps:

  1. Combine with conditional logic: Use bash to add conditional processing before envsubst
  2. Create a template library: Build a collection of useful templates for your common tasks
  3. Automate configuration: Use envsubst in deployment scripts to generate environment-specific configs
  4. Learn about alternatives: Explore more powerful templating tools like Jinja2 or Mustache when you need more features

Conclusion: The Joy of Learning envsubst Through Simple Terminal Commands

As we’ve seen throughout this article, learning envsubst through simple terminal commands is not only practical but also fun! This simple utility, when mastered, becomes an invaluable tool in your command-line toolkit. From generating configuration files to creating dynamic documents, envsubst’s simplicity is its greatest strength.

I hope these hands-on examples have given you a solid foundation and sparked your creativity. The next time you find yourself manually editing configuration files for different environments or repeatedly changing the same values in text files, remember envsubst and the power of environment variable substitution.

What started as a simple command-line tool for me has become an essential part of my daily workflow, saving hours of tedious text editing and reducing errors. I encourage you to keep experimenting with envsubst and find your own creative uses for this versatile tool!

Feel free to share your own envsubst experiments or ask questions in the comments below. Happy substituting!

Similar Articles

More from devops

Knowledge Quiz

Test your general knowledge with this quick quiz!

The quiz consists of 5 multiple-choice questions.

Take as much time as you need.

Your score will be shown at the end.