Using shfmt (with examples)
Use Case 1: Print a formatted version of a shell script
shfmt path/to/file
Motivation:
One common use case for using shfmt
is to print a formatted version of a shell script. This can be useful for ensuring consistent and readable code style throughout your shell scripts.
Explanation:
By running shfmt
with the path to a shell script file, the command will parse and format the content of the file according to shell scripting conventions. It will then print the formatted version to the terminal.
Example Output:
If we have a shell script file named script.sh
with the following content:
#!/bin/sh
echo "Hello, World!"
Running shfmt script.sh
will output the following:
#!/bin/sh
echo "Hello, World!"
The output is the same as the input file because the script was already properly formatted.
Use Case 2: List unformatted files
shfmt --list path/to/directory
Motivation:
It often happens that a project contains several shell script files, and it’s time-consuming to manually check each file for formatting issues. In such cases, listing unformatted files with shfmt
can help identify files that need attention.
Explanation:
The --list
flag can be used in combination with a directory path to list all the shell script files within that directory that are not properly formatted. The command will recursively traverse the directory and display the paths of the unformatted files.
Example Output:
Suppose we have the following directory structure:
path/to/directory/
script1.sh
script2.sh
subdir/
script3.sh
script4.sh
If only script1.sh
and script3.sh
are properly formatted, running shfmt --list path/to/directory
will output the following:
path/to/directory/script2.sh
path/to/directory/subdir/script4.sh
These paths represent the unformatted files that need attention.
Use Case 3: Write the result to the file instead of printing it to the terminal
shfmt --write path/to/file
Motivation:
Sometimes we want to update a shell script file with the formatted version produced by shfmt
without printing the output to the terminal. This use case is helpful for automatically applying consistent formatting across multiple files.
Explanation:
By using the --write
flag with the shfmt
command, the formatted output will be written back to the specified file instead of being displayed on the terminal.
Example Output:
Suppose we have a shell script file named script.sh
with the following content:
#!/bin/sh
echo "Hello, World!"
Running shfmt --write script.sh
will update the script.sh
file with the formatted version:
#!/bin/sh
echo "Hello, World!"
The file is now properly formatted.
Use Case 4: Simplify the code, removing redundant pieces of syntax
shfmt --simplify path/to/file
Motivation:
Shell scripts can sometimes contain redundant syntax that doesn’t affect the behavior of the script. Removing these redundancies can lead to cleaner and more concise code.
Explanation:
The --simplify
flag instructs shfmt
to simplify the code by removing redundant pieces of syntax. For example, it can remove unnecessary quotation marks or dollar signs used with variables in expressions.
Example Output:
Suppose we have a shell script file named script.sh
with the following content:
#!/bin/sh
number=5
echo "The value is: $number"
Running shfmt --simplify script.sh
will output the following:
#!/bin/sh
number=5
echo The value is: $number
In the output, the unnecessary quotation marks around the string in the echo
command have been removed.