bash-style

- ❌ 禁止行尾注释(如 command # 注释 )

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "bash-style" with this command: npx skills add doccker/cc-use-exp/doccker-cc-use-exp-bash-style

Bash 编写规范

版本:v1.0 更新:2026-01

  1. 注释规范

禁止行尾注释

  • ❌ 禁止行尾注释(如 command # 注释 )

  • ✅ 注释应独占一行,放在代码上方

适用范围:

  • Shell 脚本文件(.sh)

  • Markdown 文档中的 bash 代码块

  • Dockerfile、Makefile 中的 shell 命令

❌ 错误:行尾注释

curl -X POST https://api.example.com/data # 发送请求 docker run -d nginx # 启动容器 cp -r src/ dist/ # 复制文件

✅ 正确:注释独占一行

发送请求

curl -X POST https://api.example.com/data

启动容器

docker run -d nginx

复制文件

cp -r src/ dist/

原因:

  • 复制粘贴时容易带上注释导致命令出错

  • 长命令 + 注释 = 超长行,可读性差

  • Heredoc 块内 # 不是注释而是内容

  1. 文件写入方式

推荐方式:tee 命令

✅ 推荐:简洁、无嵌套引号

sudo tee /etc/fail2ban/jail.d/docker-nginx.local > /dev/null << 'EOF' [docker-nginx] enabled = true filter = docker-nginx logpath = /var/log/nginx/access.log maxretry = 5 EOF

追加内容

✅ 追加到文件

sudo tee -a /etc/hosts > /dev/null << 'EOF' 192.168.1.100 myserver EOF

✅ 单行追加

echo '192.168.1.100 myserver' | sudo tee -a /etc/hosts

避免的写法

❌ 避免:嵌套引号复杂,易出错

sudo bash -c 'cat > /etc/xxx << EOF content EOF'

❌ 避免:需要转义内容中的特殊字符

sudo sh -c "echo 'line1\nline2' > /etc/xxx"

方式对比

方式 优点 缺点 推荐场景

sudo tee

简洁、无嵌套 需 > /dev/null 抑制输出 首选

sudo bash -c 'cat >'

无需 tee 嵌套引号复杂 不推荐

临时文件 + mv 可先验证 步骤多 复杂配置

  1. Heredoc 引号规则

禁止变量展开(推荐默认)

✅ 'EOF' 带引号:内容原样输出,不解析变量

sudo tee /etc/xxx > /dev/null << 'EOF' $HOME 不会被展开 $(command) 不会被执行 EOF

需要变量展开

EOF 不带引号:变量会被展开

sudo tee /etc/xxx > /dev/null << EOF 当前用户: $USER 当前目录: $(pwd) EOF

选择原则

场景 用法 原因

配置文件 << 'EOF'

避免意外展开

模板生成 << EOF

需要插入变量

不确定时 << 'EOF'

更安全

  1. 权限与路径

需要 root 权限

✅ 正确:tee 配合 sudo

echo 'content' | sudo tee /etc/xxx

❌ 错误:重定向在 sudo 之外,权限不足

sudo echo 'content' > /etc/xxx

路径带空格

✅ 正确:双引号包裹路径

sudo tee "/etc/my config/file.conf" > /dev/null << 'EOF' content EOF

  1. 脚本规范

文件头

#!/usr/bin/env bash set -euo pipefail

脚本说明(一句话)

set 选项说明

选项 作用

-e

命令失败时退出

-u

使用未定义变量时报错

-o pipefail

管道中任一命令失败则整体失败

变量使用

✅ 推荐:使用 ${} 包裹

echo "Hello, ${name}"

✅ 推荐:设置默认值

db_host="${DB_HOST:-localhost}"

❌ 避免:裸变量(易与后续字符混淆)

echo "Hello, $name_suffix"

  1. 常用模式

检查命令是否存在

if ! command -v docker &> /dev/null; then echo "docker 未安装" exit 1 fi

检查文件/目录

文件存在

[[ -f /path/to/file ]] && echo "文件存在"

目录存在

[[ -d /path/to/dir ]] || mkdir -p /path/to/dir

安全删除

✅ 使用变量时防止误删

rm -rf "${dir:?}"/*

❌ 危险:变量为空时会删除根目录

rm -rf $dir/*

  1. 文档中的代码块

在 Markdown 文档中编写 bash 命令时,同样遵循以上规范:

安装配置

创建配置文件:

sudo tee /etc/myapp/config.yml > /dev/null &#x3C;&#x3C; 'EOF'
server:
  port: 8080
  host: 0.0.0.0
EOF

参考资料

  • Google Shell Style Guide

  • Bash Pitfalls

  • ShellCheck

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

ruanzhu

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

java-dev

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

frontend-dev

No summary provided by upstream source.

Repository SourceNeeds Review