当前位置: 首页 > news >正文

Shell脚本波浪号避坑指南

在 Shell 脚本中,~(波浪号)的解析规则需要注意:双引号包裹时,~不会被自动解析为用户家目录,直接写BASE_DIR="~/apps"会导致路径变成字面量的~/apps而非实际的家目录路径(比如/home/xxx/apps)。

以下是正确定义并切换到用户家目录下 apps 目录的几种方法,按推荐优先级排序:

方法 1:用$HOME环境变量(最推荐)

$HOME是 Shell 内置的环境变量,直接指向当前用户的家目录,不受引号解析规则影响,兼容性最好:

#!/bin/bash # 定义家目录下的 apps 路径(兼容所有 Shell 场景) BASE_DIR="$HOME/apps" # 切换到该目录(推荐加容错:目录不存在则创建) cd "$BASE_DIR" || { echo "目录 $BASE_DIR 不存在,正在创建..." mkdir -p "$BASE_DIR" cd "$BASE_DIR" || exit 1 # 仍失败则退出脚本 } # 验证当前目录 echo "当前目录:$(pwd)"

方法 2:先解析~再赋值(适合习惯用~的场景)

如果非要用~,需要让 Shell 先解析它(不包裹在双引号里),再赋值:

#!/bin/bash # 注意:~ 不在双引号内,先被解析为家目录,再拼接 apps BASE_DIR=~/"apps" # 切换目录(同上,加容错) cd "$BASE_DIR" || { mkdir -p "$BASE_DIR" && cd "$BASE_DIR"; } echo "当前目录:$(pwd)"

方法 3:用 eval 强制解析(不推荐,仅作了解)

eval可以强制解析字符串中的~,但存在安全风险(若路径含特殊字符可能被注入),仅适合特殊场景:

#!/bin/bash # 先定义字面量路径,再用 eval 解析 ~ BASE_DIR="~/apps" eval BASE_DIR="$BASE_DIR" # 解析后 BASE_DIR 变为 /home/xxx/apps # 切换目录 cd "$BASE_DIR" || exit 1 echo "当前目录:$(pwd)"

关键注意事项

  1. 引号规则
    • 单 / 双引号内的~会被当作普通字符,不会解析为家目录;
    • 无引号 / 仅部分包裹时(如~/"apps"),~会被正常解析。
  2. 容错处理cd命令后加||处理目录不存在的情况,避免脚本报错中断;
  3. 跨用户兼容$HOME会自动适配当前执行脚本的用户(比如 root 用户的$HOME/root),无需硬编码路径。

测试验证

执行脚本后,若输出类似当前目录:/home/你的用户名/apps(或/root/apps,若以 root 执行),则说明路径定义和切换成功。

http://www.jsqmd.com/news/95464/

相关文章:

  • 原神高帧率体验:突破60帧限制的完整解决方案
  • 强力解锁原神圣遗物管理?5步教你用椰羊工具箱告别手动录入烦恼
  • 7、支持向量机信号估计框架解析
  • SumatraPDF:重新定义轻量级PDF阅读器的使用体验
  • m3u8-downloader桌面版:流媒体视频下载的终极解决方案
  • 如何用layer组件打造实时刷新的弹窗体验
  • 终极NS模拟器管理神器:ns-emu-tools一站式使用指南
  • Seed-Coder-8B-Base与LangChain集成:打造企业级代码生成系统
  • linux 根据端口查看进程和对应的应用
  • 我发现动态知识蒸馏让基层心梗预警模型小50%精度不降
  • 从GitHub克隆到本地运行:Stable Diffusion 3.5 FP8全流程部署手册
  • 基于Wan2.2-T2V-A14B构建专业级AI视频制作平台指南
  • Joy-Con Toolkit完整指南:5个简单步骤掌握游戏手柄定制
  • WVP-GB28181-Pro国标视频监控平台终极部署指南:从零构建专业级监控系统
  • 1、数字信号处理与核方法:从基础到应用
  • 医疗AI伦理数据使用:架构师从理论到联邦学习的实践
  • Vue时间轴终极指南:快速实现美观的时间线效果
  • Wan2.2-T2V-5B模型API封装实践:供前端调用的REST服务搭建
  • ollama下载命令大全:轻松运行gpt-oss-20b各类变体
  • 黑苹果配置宝典:3大核心技巧解决90%兼容性问题
  • 好看又好玩的的404界面-附带源码
  • vgmstream终极指南:游戏音频解码与格式转换完全手册
  • 20251215给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-5.10】后调通typeC1接口
  • 扫雷游戏设计与实现(C 语言版)
  • 7 RESTful 规范
  • 城通网盘直链提取终极指南:免费突破下载限制的完整方案
  • CUDA核心数对Stable Diffusion 3.5 FP8推理性能的影响实测分析
  • 从GitHub Star数看ACE-Step热度趋势:分析潜在用户增长点
  • 《C语言电子新-2026最新版》-计算机语言发展的时代背景
  • 43、Xenomai实时系统深度解析