@@ -6,20 +6,20 @@ This guide is by SixArm.com, a software consultancy. Our customers use shell scr
6
6
7
7
Highlights:
8
8
9
- * [ Aim for POSIX when possible because of portability and standardization] ( doc/aim-for-posix.md )
10
- * [ Protect scripts by using ` set ` flags such as ` set -euf ` ] ( doc/protect-scripts-by-using-set-flags.md )
11
- * [ Print output with ` printf ` not ` echo ` ] ( doc/print-output-with-printf-not-echo.md )
12
- * [ Trap signals and exit by using ` trap trap_exit EXIT ` ] ( doc/trap-signals-and-exit.md )
13
- * [ Run executable with no file name extension] ( doc/run-executable-with-no-file-name-extension.md )
14
- * [ Source with dot operator ` . ` not keyword ` source ` ] ( doc/source-with-dot-operator-not-keyword-source.md )
15
- * [ for arg do loop] ( doc/for-arg-do-loop.md )
16
- * [ Parse options via ` while ` and ` case ` not ` getopts ` or ` getopt ` ] ( doc/parse-options-via-while-and-case-not-getopts-or-getopt.md )
17
- * [ Version name: use semantic versioning] ( doc/version-name-use-semantic-versioning.md )
18
- * [ Help: use a function and HERE document] ( doc/help-use-a-function-and-here-document.md )
19
- * [ Date & ; time format: use UTC and ISO8601] ( doc/date-time-format-use-utc-and-iso8601.md )
20
- * [ Booleans: use true and false] ( doc/booleans-use-true-and-false.md )
21
- * [ Subshells: use parentheses ` $() ` not backticks] ( doc/subshells-use-parentheses-not-backticks.md )
22
- * [ Trace using set -x then set +x without printing] ( doc/trace-using-set-x-then-set-x-without-printing.md )
9
+ * [ Aim for POSIX when possible because of portability and standardization] ( doc/aim-for-posix )
10
+ * [ Protect scripts by using ` set ` flags such as ` set -euf ` ] ( doc/protect-scripts-by-using-set-flags )
11
+ * [ Print output with ` printf ` not ` echo ` ] ( doc/print-output-with-printf-not-echo )
12
+ * [ Trap signals and exit by using ` trap trap_exit EXIT ` ] ( doc/trap-signals-and-exit )
13
+ * [ Run executable with no file name extension] ( doc/run-executable-with-no-file-name-extension )
14
+ * [ Source with dot operator ` . ` not keyword ` source ` ] ( doc/source-with-dot-operator-not-keyword-source )
15
+ * [ for arg do loop] ( doc/for-arg-do-loop )
16
+ * [ Parse options via ` while… case ` not ` getopts/ getopt ` ] ( doc/parse-options-via-while-and-case-not-getopts-or-getopt )
17
+ * [ Version name: use semantic versioning] ( doc/version-name-use-semantic-versioning )
18
+ * [ Help: use a function and HERE document] ( doc/help-use-a-function-and-here-document )
19
+ * [ Date & ; time format: use UTC and ISO8601] ( doc/date-time-format-use-utc-and-iso8601 )
20
+ * [ Booleans: use true and false] ( doc/booleans-use-true-and-false )
21
+ * [ Subshells: use parentheses ` $() ` not backticks] ( doc/subshells-use-parentheses-not-backticks )
22
+ * [ Trace using set -x then set +x without printing] ( doc/trace-using-set-x-then-set-x-without-printing )
23
23
* [ Hunt for bugs by using ShellCheck] ( https://www.shellcheck.net )
24
24
* [ Fix some bugs automatically, if you want, by using Shellharden] ( https://github.com/anordal/shellharden )
25
25
@@ -38,33 +38,33 @@ Demo:
38
38
39
39
## Topics
40
40
41
- Argumemt parsing:
41
+ Argument parsing:
42
42
43
- * [ Arg parse] ( doc/arg-parse.md )
44
- * [ Parse options via ` while ` and ` case ` not ` getopts ` or ` getopt ` ] ( doc/parse-options-via-while-and-case-not-getopts-or-getopt.md )
43
+ * [ Arg parse] ( doc/arg-parse )
44
+ * [ Parse options via ` while ` and ` case ` not ` getopts ` or ` getopt ` ] ( doc/parse-options-via-while-and-case-not-getopts-or-getopt )
45
45
46
46
Environment variables:
47
47
48
- * [ Test if set or unset] ( doc/environment-variables/test-if-set-or-unset.md )
49
- * [ $FUNCNAME function name] ( doc/environment-variables/funcname-function-name.md )
48
+ * [ Test if set or unset] ( doc/environment-variables/test-if-set-or-unset )
49
+ * [ $FUNCNAME function name] ( doc/environment-variables/funcname-function-name )
50
50
51
51
Directories:
52
52
53
- * [ Script directory] ( doc/directories/script-directory.md )
54
- * [ Log directory: use $LOG_HOME] ( doc/directories/cache-directory-use-log-home.md )
55
- * [ Data directory: use $XDG_DATA_HOME] ( doc/directories/data-directory-use-xdg-data-home.md )
56
- * [ Cache directory: use $XDG_CACHE_HOME] ( doc/directories/cache-directory-use-xdg-cache-home.md )
57
- * [ Configuration directory: use $XDG_CONFIG_HOME] ( doc/directories/configuration-directory-use-xdg-config-home.md )
58
- * [ Runtime directory: use $XDG_RUNTIME_HOME] ( doc/directories/runtime-directory-use-xdg-runtime-home.md )
59
- * [ Temporary directory:: use ` mktemp ` ] ( doc/directories/temporary-directory-use-mktemp.md )
53
+ * [ Script directory] ( doc/directories/script-directory )
54
+ * [ Log directory: use $LOG_HOME] ( doc/directories/cache-directory-use-log-home )
55
+ * [ Data directory: use $XDG_DATA_HOME] ( doc/directories/data-directory-use-xdg-data-home )
56
+ * [ Cache directory: use $XDG_CACHE_HOME] ( doc/directories/cache-directory-use-xdg-cache-home )
57
+ * [ Configuration directory: use $XDG_CONFIG_HOME] ( doc/directories/configuration-directory-use-xdg-config-home )
58
+ * [ Runtime directory: use $XDG_RUNTIME_HOME] ( doc/directories/runtime-directory-use-xdg-runtime-home )
59
+ * [ Temporary directory:: use ` mktemp ` ] ( doc/directories/temporary-directory-use-mktemp )
60
60
61
61
Files:
62
62
63
- * [ Temporary file using ` mktemp ` and ` trap ` ] ( doc/temporary-file-using-mktemp-and-trap.md )
64
- * [ Find files with filter for permission denied] ( doc/find-files-with-filter-for-permission-denied.md )
65
- * [ Find files with special characters] ( doc/find-files-with-special-characters.md )
66
- * [ Find files with readable permissions] ( doc/find-files-with-readable-permissions.md )
67
- * [ Find files with executable, perm, test, exec] ( doc/find-files-with-executable-perm-test-exec.md )
63
+ * [ Temporary file using ` mktemp ` and ` trap ` ] ( doc/temporary-file-using-mktemp-and-trap )
64
+ * [ Find files with filter for permission denied] ( doc/find-files-with-filter-for-permission-denied )
65
+ * [ Find files with special characters] ( doc/find-files-with-special-characters )
66
+ * [ Find files with readable permissions] ( doc/find-files-with-readable-permissions )
67
+ * [ Find files with executable, perm, test, exec] ( doc/find-files-with-executable-perm-test-exec )
68
68
69
69
References:
70
70
@@ -78,35 +78,35 @@ References:
78
78
79
79
Conventions:
80
80
81
- * [ Program name using a string or basename] ( doc/program-name-using-a-string-or-basename.md )
82
- * [ Program directory using pwd and dirname] ( doc/program-directory-using-pwd-andr-basename.md )
83
- * [ Functions: out, err, die, big, log, now, sec, zid, cmd, etc.] ( doc/functions-out-err-die-big-log-now-sec-zid-cmd-etc.md )
84
- * [ Assert functions: assert_empty, assert_equal, assert_match] ( doc/assert-functions.md )
85
- * [ sec() function portability] ( doc/sec-function-portability.md )
81
+ * [ Program name using a string or basename] ( doc/program-name-using-a-string-or-basename )
82
+ * [ Program directory using pwd and dirname] ( doc/program-directory-using-pwd-andr-basename )
83
+ * [ Functions: out, err, die, big, log, now, sec, zid, cmd, etc.] ( doc/functions-out-err-die-big-log-now-sec-zid-cmd-etc )
84
+ * [ Assert functions: assert_empty, assert_equal, assert_match] ( doc/assert-functions )
85
+ * [ sec() function portability] ( doc/sec-function-portability )
86
86
87
87
Control flow statements:
88
88
89
- * [ While loop with index counter] ( doc/while-loop-with-index-counter.md )
90
- * [ Do while loop] ( doc/do-while-loop.md )
91
- * [ Case statement that skips option dash flags] ( doc/case-statement-that-skips-option-dash-flags.md )
89
+ * [ While loop with index counter] ( doc/while-loop-with-index-counter )
90
+ * [ Do while loop] ( doc/do-while-loop )
91
+ * [ Case statement that skips option dash flags] ( doc/case-statement-that-skips-option-dash-flags )
92
92
93
93
Functions:
94
94
95
- * [ Export function] ( doc/export-function.md )
96
- * [ Number functions] ( doc/number-functions.md )
97
- * [ Array functions] ( doc/array-functions.md )
98
- * [ URL encode and URL decode] ( doc/url-encode-and-url-decode.md )
95
+ * [ Export function] ( doc/export-function )
96
+ * [ Number functions] ( doc/number-functions )
97
+ * [ Array functions] ( doc/array-functions )
98
+ * [ URL encode and URL decode] ( doc/url-encode-and-url-decode )
99
99
100
100
Command snippets:
101
101
102
- * [ awk match_between] ( doc/awk-match-between.md )
102
+ * [ awk match_between] ( doc/awk-match-between )
103
103
104
104
Compatibilities:
105
105
106
- * [ ` readlink ` on macOS behaves differently] ( doc/readlink-on-macos-behaves-differently.md )
107
- * [ ` realpath ` is` not available on macOS default] ( doc/realpath-is-not-available-on-macos-default.md )
106
+ * [ ` readlink ` on macOS behaves differently] ( doc/readlink-on-macos-behaves-differently )
107
+ * [ ` realpath ` is` not available on macOS default] ( doc/realpath-is-not-available-on-macos-default )
108
108
109
109
PostgreSQL psql:
110
110
111
- * [ psql helpers] ( doc/psql-helpers.md )
111
+ * [ psql helpers] ( doc/psql-helpers )
112
112
0 commit comments