Bird
Raised Fist0
Bash Scriptingscripting~5 mins

set -u for undefined variable errors in Bash Scripting - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does set -u do in a Bash script?

set -u makes the script stop and show an error if you try to use a variable that has not been set or defined. This helps catch mistakes early.

Click to reveal answer
beginner
Why is using set -u helpful when writing scripts?

It prevents bugs caused by typos or missing variables by stopping the script immediately when an undefined variable is used. This makes scripts safer and easier to debug.

Click to reveal answer
intermediate
How can you safely use a variable that might be undefined when set -u is active?

You can provide a default value using ${VAR:-default}. This way, if VAR is not set, the script uses default instead of stopping.

Click to reveal answer
beginner
What happens if you run this script with set -u enabled?
#!/bin/bash
set -u
echo "Hello $NAME"

The script will stop with an error because NAME is not defined. set -u catches this and prevents the script from continuing.

Click to reveal answer
beginner
How do you enable set -u in a Bash script?

Add the line set -u near the top of your script, usually after the #!/bin/bash line.

Click to reveal answer
What does set -u do in a Bash script?
APrints all variables used in the script
BAllows undefined variables without errors
CStops the script if an undefined variable is used
DDisables all error messages
How can you avoid errors with set -u when a variable might be missing?
AUse <code>${VAR:-default}</code> to provide a default value
BIgnore the error and continue
CUse <code>unset VAR</code> before using it
DDisable <code>set -u</code> temporarily
Where should you place set -u in your Bash script?
AAt the very end of the script
BAt the top, after the <code>#!/bin/bash</code> line
CAnywhere in the middle
DOnly inside functions
What error will you get if you use an undefined variable with set -u?
Abash: variable_name: unbound variable
Bbash: variable_name: command not found
Cbash: syntax error near unexpected token
DNo error, script continues
If you want to allow undefined variables without errors, what should you do?
AUse <code>set -e</code> instead
BAlways define all variables
CUse <code>set -x</code>
DDo not use <code>set -u</code>
Explain what set -u does in a Bash script and why it is useful.
Think about how scripts behave when variables are missing.
You got /3 concepts.
    Describe how to safely use variables that might not be set when set -u is enabled.
    Look at variable expansion syntax.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the set -u command do in a bash script?
      easy
      A. Prints all variables and their values
      B. Allows the script to continue even if variables are undefined
      C. Stops the script if an undefined variable is used
      D. Disables all error messages in the script

      Solution

      1. Step 1: Understand the purpose of set -u

        The set -u option makes the script stop if it tries to use a variable that has not been set.
      2. Step 2: Compare with other options

        Other options like continuing or printing variables do not match what set -u does.
      3. Final Answer:

        Stops the script if an undefined variable is used -> Option C
      4. Quick Check:

        set -u stops on unset variables [OK]
      Hint: Remember: set -u = stop on unset variable [OK]
      Common Mistakes:
      • Thinking set -u ignores unset variables
      • Confusing set -u with error message control
      • Assuming it prints variables automatically
      2. Which of the following is the correct way to enable set -u in a bash script?
      easy
      A. set -x
      B. set -e
      C. set +u
      D. set -u

      Solution

      1. Step 1: Identify the correct option to enable set -u

        The command to enable the undefined variable error checking is exactly set -u.
      2. Step 2: Understand other options

        set -x enables debugging, set +u disables set -u, and set -e stops on any error, not specifically unset variables.
      3. Final Answer:

        set -u -> Option D
      4. Quick Check:

        Enable set -u with set -u [OK]
      Hint: Use set -u exactly to enable undefined variable errors [OK]
      Common Mistakes:
      • Confusing set -u with set -x or set -e
      • Using set +u which disables the feature
      • Forgetting the dash before 'u'
      3. What will happen when running this script with set -u enabled?
      #!/bin/bash
      set -u
      
      echo "Hello $NAME"
      medium
      A. Stops with an error without printing anything if NAME is not set
      B. Prints 'Hello $NAME' literally without substitution
      C. Prints 'Hello' followed by the value of NAME if set, else empty
      D. Ignores the unset NAME and prints 'Hello '

      Solution

      1. Step 1: Understand set -u effect on unset variables

        With set -u, using an unset variable like NAME causes the script to stop with an error.
      2. Step 2: Analyze the script behavior

        The script tries to print $NAME which is not set, so it will stop and show an error instead of printing anything.
      3. Final Answer:

        Stops with an error without printing anything if NAME is not set -> Option A
      4. Quick Check:

        Unset variable with set -u causes error [OK]
      Hint: Unset variable with set -u stops script immediately [OK]
      Common Mistakes:
      • Assuming unset variables print empty strings
      • Thinking script ignores unset variables
      • Confusing literal printing with variable substitution
      4. Given this script snippet with set -u enabled, what is the error and how to fix it?
      #!/bin/bash
      set -u
      
      if [ "$USER_NAME" = "admin" ]; then
        echo "Welcome admin"
      fi
      medium
      A. Error: Syntax error in if statement; fix by adding spaces
      B. Error: USER_NAME undefined; fix by setting USER_NAME or using ${USER_NAME:-default}
      C. No error; script runs fine
      D. Error: Missing quotes around USER_NAME; fix by adding quotes

      Solution

      1. Step 1: Identify the cause of error with set -u

        The variable USER_NAME is used but not set, causing the script to stop with an error.
      2. Step 2: Fix the error by providing a default value

        Use ${USER_NAME:-default} to avoid error if USER_NAME is unset, or ensure it is set before use.
      3. Final Answer:

        Error: USER_NAME undefined; fix by setting USER_NAME or using ${USER_NAME:-default} -> Option B
      4. Quick Check:

        Unset variable error fixed by default value [OK]
      Hint: Use ${VAR:-default} to avoid unset variable errors [OK]
      Common Mistakes:
      • Ignoring that variable might be unset
      • Trying to fix syntax instead of variable usage
      • Forgetting to quote variables properly
      5. How can you safely use a variable CONFIG_PATH in a script with set -u enabled, providing a default path if it is not set?
      hard
      A. Use echo "${CONFIG_PATH:-/etc/default/config}"
      B. Use if [ -z "$CONFIG_PATH" ]; then echo "/etc/default/config"; fi
      C. Disable set -u before using the variable
      D. Use echo "$CONFIG_PATH" directly

      Solution

      1. Step 1: Understand default value syntax

        Using ${CONFIG_PATH:-/etc/default/config} provides a default if CONFIG_PATH is unset, avoiding errors with set -u.
      2. Step 2: Compare other options

        Direct use causes error if unset, disabling set -u is not recommended, and the if statement does not print the variable if set.
      3. Final Answer:

        Use echo "${CONFIG_PATH:-/etc/default/config}" -> Option A
      4. Quick Check:

        Default value syntax avoids unset errors [OK]
      Hint: Use ${VAR:-default} to safely handle unset variables [OK]
      Common Mistakes:
      • Using variable directly without default
      • Disabling set -u instead of fixing code
      • Incorrect if condition that skips printing variable
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard