@hybridlabor-api/aos 4.8.0 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/.agents/agents.md +1 -1
  2. package/.agents/nodes.json +1 -1
  3. package/.agents/vendor-manifest.json +23 -1
  4. package/.claude/agents/godmode-media-eventtech.md +1 -1
  5. package/.claude/hooks/conventional-commits.mjs +125 -0
  6. package/.claude/hooks/env-file-protection.mjs +105 -0
  7. package/.claude/hooks/go-gate.mjs +101 -81
  8. package/.claude/settings.json +13 -0
  9. package/.opencode/agents/godmode-media-eventtech.md +1 -1
  10. package/.opencode/plugins/bdb-aos.js +31 -4
  11. package/README.de.md +1 -1
  12. package/README.md +1 -1
  13. package/README.pt.md +1 -1
  14. package/THIRD_PARTY_NOTICES.md +88 -0
  15. package/docs/skills_table.md +1 -1
  16. package/installer.js +174 -46
  17. package/package.json +6 -2
  18. package/packages/aos-cli/README.md +80 -0
  19. package/packages/aos-cli/bin/aos-cli.mjs +134 -0
  20. package/packages/aos-cli/core-skills.json +12 -0
  21. package/packages/aos-cli/extensions/aos.ts +321 -0
  22. package/packages/aos-cli/package-lock.json +1923 -0
  23. package/packages/aos-cli/package.json +29 -0
  24. package/packages/aos-cli/scripts/check-theme.mjs +63 -0
  25. package/packages/aos-cli/themes/aos.json +97 -0
  26. package/scripts/build-plugin-manifest.mjs +131 -0
  27. package/scripts/validate-skills.mjs +81 -6
  28. package/skills/basic/ao-orchestrator/SKILL.md +116 -0
  29. package/skills/global_config/agenttrail/SKILL.md +6 -1
  30. package/skills/global_config/ask-tim/SKILL.md +4 -4
  31. package/skills/global_config/bash-script-generator/SKILL.md +201 -0
  32. package/skills/global_config/bash-script-generator/assets/templates/standard-template.sh +96 -0
  33. package/skills/global_config/bash-script-generator/docs/bash-scripting-guide.md +729 -0
  34. package/skills/global_config/bash-script-generator/docs/generation-best-practices.md +193 -0
  35. package/skills/global_config/bash-script-generator/docs/script-patterns.md +566 -0
  36. package/skills/global_config/bash-script-generator/docs/text-processing-guide.md +437 -0
  37. package/skills/global_config/bash-script-generator/examples/log-analyzer.sh +92 -0
  38. package/skills/global_config/bash-script-generator/scripts/generate_script_template.sh +123 -0
  39. package/skills/global_config/bash-script-generator/scripts/run_ci_checks.sh +172 -0
  40. package/skills/global_config/bash-script-generator/scripts/test_generator.sh +413 -0
  41. package/skills/global_config/bash-script-validator/SKILL.md +249 -0
  42. package/skills/global_config/bash-script-validator/docs/awk-reference.md +449 -0
  43. package/skills/global_config/bash-script-validator/docs/bash-reference.md +468 -0
  44. package/skills/global_config/bash-script-validator/docs/common-mistakes.md +623 -0
  45. package/skills/global_config/bash-script-validator/docs/grep-reference.md +395 -0
  46. package/skills/global_config/bash-script-validator/docs/regex-reference.md +391 -0
  47. package/skills/global_config/bash-script-validator/docs/sed-reference.md +454 -0
  48. package/skills/global_config/bash-script-validator/docs/shell-reference.md +463 -0
  49. package/skills/global_config/bash-script-validator/docs/shellcheck-reference.md +399 -0
  50. package/skills/global_config/bash-script-validator/examples/bad-bash.sh +55 -0
  51. package/skills/global_config/bash-script-validator/examples/bad-shell.sh +54 -0
  52. package/skills/global_config/bash-script-validator/examples/good-bash.sh +71 -0
  53. package/skills/global_config/bash-script-validator/examples/good-shell.sh +69 -0
  54. package/skills/global_config/bash-script-validator/scripts/run_ci_checks.sh +23 -0
  55. package/skills/global_config/bash-script-validator/scripts/shellcheck_wrapper.sh +174 -0
  56. package/skills/global_config/bash-script-validator/scripts/test_validate.sh +446 -0
  57. package/skills/global_config/bash-script-validator/scripts/validate.sh +512 -0
  58. package/skills/global_config/ci-pipeline/SKILL.md +135 -0
  59. package/skills/global_config/dispatching-parallel-agents/SKILL.md +170 -0
  60. package/skills/global_config/dockerfile-generator/SKILL.md +1038 -0
  61. package/skills/global_config/dockerfile-generator/examples/example.dockerignore +95 -0
  62. package/skills/global_config/dockerfile-generator/examples/golang-distroless.Dockerfile +34 -0
  63. package/skills/global_config/dockerfile-generator/examples/java-springboot.Dockerfile +45 -0
  64. package/skills/global_config/dockerfile-generator/examples/nextjs-production.Dockerfile +49 -0
  65. package/skills/global_config/dockerfile-generator/examples/nodejs-multistage.Dockerfile +55 -0
  66. package/skills/global_config/dockerfile-generator/examples/python-fastapi.Dockerfile +48 -0
  67. package/skills/global_config/dockerfile-generator/references/language_specific_guides.md +510 -0
  68. package/skills/global_config/dockerfile-generator/references/multistage_builds.md +570 -0
  69. package/skills/global_config/dockerfile-generator/references/optimization_patterns.md +492 -0
  70. package/skills/global_config/dockerfile-generator/references/security_best_practices.md +375 -0
  71. package/skills/global_config/dockerfile-generator/scripts/generate_dockerignore.sh +199 -0
  72. package/skills/global_config/dockerfile-generator/scripts/generate_golang.sh +172 -0
  73. package/skills/global_config/dockerfile-generator/scripts/generate_java.sh +185 -0
  74. package/skills/global_config/dockerfile-generator/scripts/generate_nodejs.sh +279 -0
  75. package/skills/global_config/dockerfile-generator/scripts/generate_python.sh +218 -0
  76. package/skills/global_config/dockerfile-generator/scripts/test_generator.sh +210 -0
  77. package/skills/global_config/dockerfile-validator/SKILL.md +300 -0
  78. package/skills/global_config/dockerfile-validator/examples/.dockerignore.example +34 -0
  79. package/skills/global_config/dockerfile-validator/examples/bad-example.Dockerfile +37 -0
  80. package/skills/global_config/dockerfile-validator/examples/golang-distroless.Dockerfile +50 -0
  81. package/skills/global_config/dockerfile-validator/examples/good-example.Dockerfile +52 -0
  82. package/skills/global_config/dockerfile-validator/examples/python-optimized.Dockerfile +53 -0
  83. package/skills/global_config/dockerfile-validator/examples/security-issues.Dockerfile +42 -0
  84. package/skills/global_config/dockerfile-validator/references/docker_best_practices.md +348 -0
  85. package/skills/global_config/dockerfile-validator/references/optimization_guide.md +473 -0
  86. package/skills/global_config/dockerfile-validator/references/security_checklist.md +208 -0
  87. package/skills/global_config/dockerfile-validator/scripts/dockerfile-validate.sh +699 -0
  88. package/skills/global_config/dockerfile-validator/scripts/test_validate.sh +35 -0
  89. package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn-lock-read.Dockerfile +6 -0
  90. package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn.Dockerfile +6 -0
  91. package/skills/global_config/dockerfile-validator/tests/fixtures/from-platform-nonroot.Dockerfile +7 -0
  92. package/skills/global_config/dockerfile-validator/tests/test_regression.sh +164 -0
  93. package/skills/global_config/finishing-a-development-branch/SKILL.md +228 -0
  94. package/skills/global_config/github-actions-generator/SKILL.md +353 -0
  95. package/skills/global_config/github-actions-generator/assets/templates/action/composite/action.yml +82 -0
  96. package/skills/global_config/github-actions-generator/assets/templates/action/docker/Dockerfile +25 -0
  97. package/skills/global_config/github-actions-generator/assets/templates/action/docker/action.yml +42 -0
  98. package/skills/global_config/github-actions-generator/assets/templates/action/docker/entrypoint.sh +27 -0
  99. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/action.yml +33 -0
  100. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/index.js +50 -0
  101. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/package.json +27 -0
  102. package/skills/global_config/github-actions-generator/assets/templates/workflow/basic_workflow.yml +242 -0
  103. package/skills/global_config/github-actions-generator/assets/templates/workflow/reusable_workflow.yml +106 -0
  104. package/skills/global_config/github-actions-generator/examples/README.md +147 -0
  105. package/skills/global_config/github-actions-generator/examples/actions/setup-node-cached/action.yml +93 -0
  106. package/skills/global_config/github-actions-generator/examples/caching/docker-buildkit.yml +256 -0
  107. package/skills/global_config/github-actions-generator/examples/security/dependency-review.yml +62 -0
  108. package/skills/global_config/github-actions-generator/examples/security/sbom-attestation.yml +119 -0
  109. package/skills/global_config/github-actions-generator/examples/triggers/chatops-commands.yml +475 -0
  110. package/skills/global_config/github-actions-generator/examples/triggers/repository-dispatch.yml +418 -0
  111. package/skills/global_config/github-actions-generator/examples/triggers/workflow-orchestration.yml +404 -0
  112. package/skills/global_config/github-actions-generator/examples/workflows/docker-build-push.yml +68 -0
  113. package/skills/global_config/github-actions-generator/examples/workflows/go-ci.yml +161 -0
  114. package/skills/global_config/github-actions-generator/examples/workflows/monorepo-ci.yml +340 -0
  115. package/skills/global_config/github-actions-generator/examples/workflows/multi-environment-deploy.yml +406 -0
  116. package/skills/global_config/github-actions-generator/examples/workflows/nodejs-ci.yml +122 -0
  117. package/skills/global_config/github-actions-generator/examples/workflows/python-ci.yml +157 -0
  118. package/skills/global_config/github-actions-generator/examples/workflows/scheduled-tasks.yml +376 -0
  119. package/skills/global_config/github-actions-generator/references/advanced-triggers.md +917 -0
  120. package/skills/global_config/github-actions-generator/references/best-practices.md +755 -0
  121. package/skills/global_config/github-actions-generator/references/common-actions.md +715 -0
  122. package/skills/global_config/github-actions-generator/references/custom-actions.md +320 -0
  123. package/skills/global_config/github-actions-generator/references/expressions-and-contexts.md +688 -0
  124. package/skills/global_config/github-actions-generator/references/modern-features.md +421 -0
  125. package/skills/global_config/github-actions-generator/scripts/test_generator.sh +344 -0
  126. package/skills/global_config/github-actions-templates/SKILL.md +7 -0
  127. package/skills/global_config/github-actions-validator/SKILL.md +576 -0
  128. package/skills/global_config/github-actions-validator/examples/README.md +88 -0
  129. package/skills/global_config/github-actions-validator/examples/outdated-versions.yml +76 -0
  130. package/skills/global_config/github-actions-validator/examples/valid-ci.yml +79 -0
  131. package/skills/global_config/github-actions-validator/examples/with-errors.yml +47 -0
  132. package/skills/global_config/github-actions-validator/references/act_usage.md +233 -0
  133. package/skills/global_config/github-actions-validator/references/action_versions.md +122 -0
  134. package/skills/global_config/github-actions-validator/references/actionlint_usage.md +343 -0
  135. package/skills/global_config/github-actions-validator/references/common_errors.md +512 -0
  136. package/skills/global_config/github-actions-validator/references/modern_features.md +384 -0
  137. package/skills/global_config/github-actions-validator/references/runners.md +317 -0
  138. package/skills/global_config/github-actions-validator/scripts/install_tools.sh +113 -0
  139. package/skills/global_config/github-actions-validator/scripts/validate_workflow.sh +910 -0
  140. package/skills/global_config/github-actions-validator/tests/test_validate_workflow.sh +237 -0
  141. package/skills/global_config/makefile-generator/SKILL.md +614 -0
  142. package/skills/global_config/makefile-generator/assets/templates/.gitkeep +1 -0
  143. package/skills/global_config/makefile-generator/docs/makefile-structure.md +530 -0
  144. package/skills/global_config/makefile-generator/docs/optimization-guide.md +784 -0
  145. package/skills/global_config/makefile-generator/docs/patterns-guide.md +642 -0
  146. package/skills/global_config/makefile-generator/docs/security-guide.md +361 -0
  147. package/skills/global_config/makefile-generator/docs/targets-guide.md +642 -0
  148. package/skills/global_config/makefile-generator/docs/variables-guide.md +596 -0
  149. package/skills/global_config/makefile-generator/scripts/add_standard_targets.sh +539 -0
  150. package/skills/global_config/makefile-generator/scripts/generate_makefile_template.sh +690 -0
  151. package/skills/global_config/makefile-generator/test/test_helper_scripts.sh +190 -0
  152. package/skills/global_config/makefile-validator/SKILL.md +244 -0
  153. package/skills/global_config/makefile-validator/docs/bake-tool.md +1000 -0
  154. package/skills/global_config/makefile-validator/docs/best-practices.md +858 -0
  155. package/skills/global_config/makefile-validator/docs/common-mistakes.md +944 -0
  156. package/skills/global_config/makefile-validator/examples/bad-makefile.mk +77 -0
  157. package/skills/global_config/makefile-validator/examples/good-makefile.mk +103 -0
  158. package/skills/global_config/makefile-validator/scripts/test_validate.sh +382 -0
  159. package/skills/global_config/makefile-validator/scripts/validate_makefile.sh +712 -0
  160. package/skills/global_config/{MCP_Manage → mcp-manage}/SKILL.md +3 -3
  161. package/skills/global_config/requesting-code-review/SKILL.md +98 -0
  162. package/skills/global_config/requesting-code-review/code-reviewer.md +198 -0
  163. package/skills/global_config/using-git-worktrees/SKILL.md +170 -0
  164. package/skills/global_config/verification-before-completion/SKILL.md +123 -0
  165. package/skills/global_config/writing-plans/SKILL.md +126 -46
  166. package/skills/global_config/writing-plans-legacy/SKILL.md +139 -0
@@ -0,0 +1,468 @@
1
+ # Bash Reference Guide
2
+
3
+ ## Overview
4
+
5
+ Bash (Bourne Again SHell) is a Unix shell and command language. This guide covers bash-specific features, syntax, and best practices.
6
+
7
+ **Official Documentation:** https://www.gnu.org/software/bash/manual/
8
+
9
+ ## Bash vs POSIX Shell (sh)
10
+
11
+ Bash is a **superset** of POSIX sh with many extensions. Not all bash scripts are POSIX-compliant.
12
+
13
+ ### Bash-Specific Features (NOT in POSIX sh)
14
+
15
+ 1. **Arrays**
16
+ ```bash
17
+ # Bash only
18
+ array=(one two three)
19
+ echo "${array[0]}"
20
+ declare -a indexed_array
21
+ declare -A associative_array
22
+ ```
23
+
24
+ 2. **[[ ]] Test Construct**
25
+ ```bash
26
+ # Bash only - more powerful than [ ]
27
+ if [[ "$var" == pattern* ]]; then
28
+ echo "Matches pattern"
29
+ fi
30
+
31
+ # POSIX sh - use [ ]
32
+ if [ "$var" = "exact" ]; then
33
+ echo "Exact match"
34
+ fi
35
+ ```
36
+
37
+ 3. **Process Substitution**
38
+ ```bash
39
+ # Bash only
40
+ diff <(ls dir1) <(ls dir2)
41
+ ```
42
+
43
+ 4. **Brace Expansion**
44
+ ```bash
45
+ # Bash only
46
+ echo {1..10} # Outputs: 1 2 3 4 5 6 7 8 9 10
47
+ mv file.{txt,bak} # Renames file.txt to file.bak
48
+ ```
49
+
50
+ 5. **Function Keyword**
51
+ ```bash
52
+ # Bash style (function keyword optional)
53
+ function myfunction {
54
+ echo "Hello"
55
+ }
56
+
57
+ # POSIX sh style (no function keyword)
58
+ myfunction() {
59
+ echo "Hello"
60
+ }
61
+ ```
62
+
63
+ 6. **Local Variables**
64
+ ```bash
65
+ # Bash only
66
+ function myfunc {
67
+ local var="value"
68
+ echo "$var"
69
+ }
70
+ ```
71
+
72
+ 7. **Extended Pattern Matching**
73
+ ```bash
74
+ shopt -s extglob
75
+ # Bash only
76
+ ?(pattern-list) # Matches zero or one occurrence
77
+ *(pattern-list) # Matches zero or more occurrences
78
+ +(pattern-list) # Matches one or more occurrences
79
+ @(pattern-list) # Matches one occurrence
80
+ !(pattern-list) # Matches anything except pattern
81
+ ```
82
+
83
+ 8. **Advanced Parameter Expansion**
84
+ ```bash
85
+ # Bash supports more advanced parameter expansion
86
+ ${var,,} # Lowercase
87
+ ${var^^} # Uppercase
88
+ ${var:0:5} # Substring
89
+ ${var/pattern/replacement} # Replace first
90
+ ${var//pattern/replacement} # Replace all
91
+ ```
92
+
93
+ 9. **Source vs Dot**
94
+ ```bash
95
+ source script.sh # Bash (also works: . script.sh)
96
+ . script.sh # POSIX sh
97
+ ```
98
+
99
+ 10. **Bash Built-in Variables**
100
+ ```bash
101
+ $RANDOM # Random number
102
+ $SECONDS # Seconds since script started
103
+ $BASH_VERSION
104
+ $BASH_SOURCE
105
+ $FUNCNAME
106
+ $DIRSTACK
107
+ ```
108
+
109
+ ## Core Bash Syntax
110
+
111
+ ### Variables
112
+
113
+ ```bash
114
+ # Assignment (no spaces around =)
115
+ var="value"
116
+ readonly CONST="constant"
117
+ declare -i integer=42
118
+ declare -r readonly_var="const"
119
+ declare -x export_var="exported"
120
+
121
+ # Reading variables
122
+ echo "$var"
123
+ echo "${var}" # Preferred for clarity
124
+
125
+ # Command substitution
126
+ result=$(command)
127
+ result=`command` # Deprecated, use $() instead
128
+
129
+ # Arithmetic
130
+ result=$((5 + 3))
131
+ ((var++))
132
+ ((var += 5))
133
+ ```
134
+
135
+ ### Quoting Rules
136
+
137
+ ```bash
138
+ # Double quotes: Preserve literal value except $, `, \, and !
139
+ echo "Value: $var"
140
+
141
+ # Single quotes: Preserve literal value of all characters
142
+ echo 'Value: $var' # Outputs: Value: $var
143
+
144
+ # No quotes: Word splitting and pathname expansion
145
+ files=$var # Dangerous if var contains spaces
146
+
147
+ # Always quote variable expansions unless you need word splitting
148
+ cp "$file" "$destination"
149
+ ```
150
+
151
+ ### Control Structures
152
+
153
+ ```bash
154
+ # If statement
155
+ if [[ condition ]]; then
156
+ # commands
157
+ elif [[ condition ]]; then
158
+ # commands
159
+ else
160
+ # commands
161
+ fi
162
+
163
+ # Case statement
164
+ case "$var" in
165
+ pattern1)
166
+ # commands
167
+ ;;
168
+ pattern2|pattern3)
169
+ # commands
170
+ ;;
171
+ *)
172
+ # default
173
+ ;;
174
+ esac
175
+
176
+ # For loops
177
+ for item in list; do
178
+ echo "$item"
179
+ done
180
+
181
+ for ((i=0; i<10; i++)); do
182
+ echo "$i"
183
+ done
184
+
185
+ # While loop
186
+ while [[ condition ]]; do
187
+ # commands
188
+ done
189
+
190
+ # Until loop
191
+ until [[ condition ]]; do
192
+ # commands
193
+ done
194
+ ```
195
+
196
+ ### Functions
197
+
198
+ ```bash
199
+ # Function definition
200
+ function_name() {
201
+ local local_var="value"
202
+ echo "$1" # First argument
203
+ return 0 # Exit status
204
+ }
205
+
206
+ # Call function
207
+ function_name arg1 arg2
208
+
209
+ # Function with return value (via stdout)
210
+ get_value() {
211
+ echo "returned value"
212
+ }
213
+ result=$(get_value)
214
+ ```
215
+
216
+ ### Error Handling
217
+
218
+ ```bash
219
+ # Exit on error
220
+ set -e
221
+ set -o errexit
222
+
223
+ # Exit on undefined variable
224
+ set -u
225
+ set -o nounset
226
+
227
+ # Pipe failure detection
228
+ set -o pipefail
229
+
230
+ # Combining options
231
+ set -euo pipefail
232
+
233
+ # Trap errors
234
+ trap 'echo "Error on line $LINENO"' ERR
235
+
236
+ # Trap exit
237
+ trap cleanup EXIT
238
+ cleanup() {
239
+ # Cleanup code
240
+ rm -f "$temp_file"
241
+ }
242
+ ```
243
+
244
+ ### Input/Output Redirection
245
+
246
+ ```bash
247
+ # Redirect stdout
248
+ command > file
249
+
250
+ # Redirect stderr
251
+ command 2> errors.txt
252
+
253
+ # Redirect both
254
+ command &> output.txt
255
+ command > output.txt 2>&1
256
+
257
+ # Append
258
+ command >> file
259
+
260
+ # Here document
261
+ cat <<EOF
262
+ multiple
263
+ lines
264
+ of text
265
+ EOF
266
+
267
+ # Here string
268
+ grep pattern <<< "$variable"
269
+ ```
270
+
271
+ ## Best Practices
272
+
273
+ ### 1. Use SheBang
274
+ ```bash
275
+ #!/usr/bin/env bash
276
+ # Portable shebang that finds bash in PATH
277
+ ```
278
+
279
+ ### 2. Enable Strict Mode
280
+ ```bash
281
+ #!/usr/bin/env bash
282
+ set -euo pipefail
283
+ IFS=$'\n\t'
284
+ ```
285
+
286
+ ### 3. Quote Variables
287
+ ```bash
288
+ # Good
289
+ cp "$source" "$destination"
290
+
291
+ # Bad (fails with spaces)
292
+ cp $source $destination
293
+ ```
294
+
295
+ ### 4. Use $() Instead of Backticks
296
+ ```bash
297
+ # Good
298
+ result=$(command)
299
+
300
+ # Bad
301
+ result=`command`
302
+ ```
303
+
304
+ ### 5. Check Command Existence
305
+ ```bash
306
+ if command -v shellcheck &>/dev/null; then
307
+ echo "ShellCheck is installed"
308
+ fi
309
+ ```
310
+
311
+ ### 6. Use [[ ]] for Tests
312
+ ```bash
313
+ # Preferred in bash
314
+ if [[ "$var" == "value" ]]; then
315
+ # ...
316
+ fi
317
+
318
+ # Use [ ] only for POSIX compliance
319
+ if [ "$var" = "value" ]; then
320
+ # ...
321
+ fi
322
+ ```
323
+
324
+ ### 7. Handle Errors Appropriately
325
+ ```bash
326
+ if ! command; then
327
+ echo "Command failed" >&2
328
+ exit 1
329
+ fi
330
+
331
+ command || { echo "Failed" >&2; exit 1; }
332
+ ```
333
+
334
+ ### 8. Use Meaningful Variable Names
335
+ ```bash
336
+ # Good
337
+ user_count=10
338
+ max_retries=3
339
+
340
+ # Bad
341
+ n=10
342
+ x=3
343
+ ```
344
+
345
+ ### 9. Add Comments
346
+ ```bash
347
+ # Explain complex logic
348
+ # Document function parameters
349
+ # Clarify non-obvious behavior
350
+ ```
351
+
352
+ ### 10. Use Functions for Reusability
353
+ ```bash
354
+ log_error() {
355
+ echo "[ERROR] $*" >&2
356
+ }
357
+
358
+ log_info() {
359
+ echo "[INFO] $*"
360
+ }
361
+ ```
362
+
363
+ ## Common Pitfalls
364
+
365
+ ### 1. Unquoted Variables
366
+ ```bash
367
+ # Wrong
368
+ file=/path/with spaces/file.txt
369
+ cat $file # Fails!
370
+
371
+ # Right
372
+ file="/path/with spaces/file.txt"
373
+ cat "$file"
374
+ ```
375
+
376
+ ### 2. Not Checking Return Codes
377
+ ```bash
378
+ # Wrong
379
+ cd /some/directory
380
+ rm -rf * # Dangerous if cd fails!
381
+
382
+ # Right
383
+ cd /some/directory || exit 1
384
+ rm -rf *
385
+ ```
386
+
387
+ ### 3. Using [ ] with Bash Features
388
+ ```bash
389
+ # Wrong
390
+ if [ "$var" == pattern* ]; then # == not in POSIX
391
+
392
+ # Right (bash)
393
+ if [[ "$var" == pattern* ]]; then
394
+
395
+ # Right (POSIX)
396
+ if [ "$var" = "exact" ]; then
397
+ ```
398
+
399
+ ### 4. Word Splitting Issues
400
+ ```bash
401
+ # Wrong
402
+ files=$(ls *.txt)
403
+ for file in $files; do # Breaks on spaces
404
+ echo "$file"
405
+ done
406
+
407
+ # Right
408
+ for file in *.txt; do
409
+ echo "$file"
410
+ done
411
+ ```
412
+
413
+ ### 5. Not Using Local in Functions
414
+ ```bash
415
+ # Wrong - pollutes global scope
416
+ function bad {
417
+ var="value"
418
+ }
419
+
420
+ # Right
421
+ function good {
422
+ local var="value"
423
+ }
424
+ ```
425
+
426
+ ## Parameter Expansion Reference
427
+
428
+ ```bash
429
+ ${var} # Value of var
430
+ ${var:-default} # Use default if var is unset
431
+ ${var:=default} # Assign default if var is unset
432
+ ${var:?error} # Error if var is unset
433
+ ${var:+alternate} # Use alternate if var is set
434
+ ${#var} # Length of var
435
+ ${var:offset:length} # Substring
436
+ ${var#pattern} # Remove shortest match from beginning
437
+ ${var##pattern} # Remove longest match from beginning
438
+ ${var%pattern} # Remove shortest match from end
439
+ ${var%%pattern} # Remove longest match from end
440
+ ${var/pattern/replacement} # Replace first match
441
+ ${var//pattern/replacement} # Replace all matches
442
+ ${var^} # Uppercase first character
443
+ ${var^^} # Uppercase all
444
+ ${var,} # Lowercase first character
445
+ ${var,,} # Lowercase all
446
+ ```
447
+
448
+ ## Special Variables
449
+
450
+ ```bash
451
+ $0 # Script name
452
+ $1-$9 # Positional parameters
453
+ ${10} # 10th parameter (braces required)
454
+ $# # Number of positional parameters
455
+ $* # All positional parameters (as single word)
456
+ $@ # All positional parameters (as separate words)
457
+ $$ # Process ID of shell
458
+ $! # PID of last background command
459
+ $? # Exit status of last command
460
+ $_ # Last argument of previous command
461
+ ```
462
+
463
+ ## Resources
464
+
465
+ - [Official GNU Bash Manual](https://www.gnu.org/software/bash/manual/)
466
+ - [Bash Guide for Beginners](http://tldp.org/LDP/Bash-Beginners-Guide/html/)
467
+ - [Advanced Bash-Scripting Guide](https://tldp.org/LDP/abs/html/)
468
+ - [ShellCheck](https://www.shellcheck.net/) - Linting tool