Bash 1.0.2
v1.0.0Write reliable Bash scripts with proper quoting, error handling, and parameter expansion.
Security Scan
OpenClaw
Benign
high confidencePurpose & Capability
Name/description match the provided markdown guidance and the only required binary (bash) is appropriate. Minor metadata inconsistency: the registry metadata Owner ID (kn7572...) does not match the ownerId in _meta.json (kn73vp5...), which is likely a packaging/metadata error but not evidence of malicious behavior.
Instruction Scope
SKILL.md and the included .md files contain static guidance and example commands for writing Bash safely. They do not instruct the agent to read arbitrary system files, exfiltrate data, or fetch external endpoints. Examples show common shell commands but are presented as examples, not runtime directives to gather user data.
Install Mechanism
No install spec and no code files—this is instruction-only, which minimizes risk because nothing will be downloaded or written to disk.
Credentials
The skill requires no environment variables, secrets, or config paths. The single required binary (bash) is appropriate for its purpose.
Persistence & Privilege
always is false and the skill is user-invocable. It does not request persistent system presence or special privileges and does not modify other skills or system-wide agent settings.
Assessment
This skill is documentation-only and appears to be what it claims: Bash best-practices and examples. Because it is instruction-only, installing it won’t download code or request credentials. Before installing, verify you trust the publisher (there is a small ownerId mismatch in the packaged _meta.json vs. registry metadata), and be cautious about copying example commands into a shell without review—examples may operate on files or have side effects. If you want extra caution, review the .md files yourself or test any example commands in a disposable/sandbox environment.Like a lobster shell, security has layers — review code before you run it.
Runtime requirements
🖥️ Clawdis
OSLinux · macOS
Binsbash
latest
Quick Reference
| Topic | File |
|---|---|
| Arrays and loops | arrays.md |
| Parameter expansion | expansion.md |
| Error handling patterns | errors.md |
| Testing and conditionals | testing.md |
Quoting Traps
- Always quote variables—
"$var"not$var, spaces break unquoted "${arr[@]}"preserves elements—${arr[*]}joins into single string- Single quotes are literal—
'$var'doesn't expand - Quote command substitution—
"$(command)"not$(command)
Word Splitting and Globbing
- Unquoted
$varsplits on whitespace—file="my file.txt"; cat $filefails - Unquoted
*expands to files—quote or escape if literal:"*"or\* set -fdisables globbing—or quote everything properly
Test Brackets
[[ ]]preferred over[ ]—no word splitting, supports&&,||, regex[[ $var == pattern* ]]—glob patterns without quotes on right side[[ $var =~ regex ]]—regex match, don't quote the regex-zis empty,-nis non-empty—[[ -z "$var" ]]tests if empty
Subshell Traps
- Pipes create subshells—
cat file | while read; do ((count++)); done—count lost - Use
while read < fileor process substitution—while read; do ...; done < <(command) ( )is subshell,{ }is same shell—variables in( )don't persist
Exit Handling
set -eexits on error—but not inif,||,&&conditionsset -uerrors on undefined vars—catches typosset -o pipefail—pipeline fails if any command fails, not just lasttrap cleanup EXIT—runs on any exit, even errors
Arrays
- Declare:
arr=(one two three)—orarr=()thenarr+=(item) - Length:
${#arr[@]}—not${#arr} - All elements:
"${arr[@]}"—always quote - Indices:
${!arr[@]}—useful for sparse arrays
Parameter Expansion
- Default value:
${var:-default}—use default if unset/empty - Assign default:
${var:=default}—also assigns to var - Error if unset:
${var:?error message}—exits with message - Substring:
${var:0:5}—first 5 chars - Remove prefix:
${var#pattern}—##for greedy
Arithmetic
$(( ))for math—result=$((a + b))(( ))for conditions—if (( count > 5 )); then- No
$needed inside$(( ))—$((count + 1))not$(($count + 1))
Common Mistakes
[ $var = "value" ]fails if var empty—use[ "$var" = "value" ]or[[ ]]if [ -f $file ]with spaces—always quote:if [[ -f "$file" ]]localin functions—without it, variables are globalreadwithout-r—backslashes interpreted as escapesechoportability—useprintffor reliable formatting
Comments
Loading comments...
