在Shell脚本中,取变量值使用 {},而 () 用于命令替换。两者有本质区别:
${} - 变量替换
bash
name="John"
echo "Hello, ${name}" # 输出: Hello, John
echo "Hello, $name" # 也可以,但建议用${}更清晰
# ${} 的优势场景:
file="test.txt"
echo "${file}.bak" # 明确变量边界,输出: test.txt.bak
echo "$file.bak" # 也能工作,但不够清晰
# 高级变量操作
path="/home/user/file.txt"
echo "${path##*/}" # 获取文件名: file.txt
echo "${path%/*}" # 获取目录: /home/user
echo "${name:-Guest}" # 默认值: 如果name为空则用Guest
$() - 命令替换
bash
# 执行命令并获取输出
current_date=$(date)
file_count=$(ls | wc -l)
echo "今天日期: $current_date"
echo "文件数量: $file_count"
# 嵌套使用
content=$(cat $(find . -name "*.txt" | head -1))
主要区别
特性 {} ()
用途 变量替换 命令替换
内容 变量名 要执行的命令
返回值 变量的值 命令的标准输出
例子 {var} (ls -l)
实际使用建议
bash
# 推荐写法
name="Alice"
greeting="Hello, ${name}! Today is $(date)."
# 复杂例子
backup_dir="/backup/$(date +%Y%m%d)"
files_to_backup=$(find /home -name "*.important" 2>/dev/null)
echo "备份目录: ${backup_dir}"
echo "找到 ${#files_to_backup[@]} 个重要文件"
总结:用 {} 获取变量值,用 () 执行命令并获取输出结果。