news 2026/4/28 11:26:49

Shell脚本波浪号避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 执行),则说明路径定义和切换成功。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 21:48:28

Wan2.2-T2V-5B与Stable Diffusion对比:谁更适合商业短视频?

Wan2.2-T2V-5B与Stable Diffusion对比:谁更适合商业短视频? 在抖音、快手、TikTok等平台主导内容消费的今天,企业每天需要产出成百上千条短视频来维持流量曝光。然而传统视频制作流程动辄数小时起步——从脚本撰写、拍摄排期到后期剪辑&#…

作者头像 李华
网站建设 2026/4/23 16:38:21

QD框架终极指南:3步实现HTTP定时任务自动化脚本管理

QD框架终极指南:3步实现HTTP定时任务自动化脚本管理 【免费下载链接】qd QD [v20230821] —— HTTP请求定时任务自动执行框架 base on HAR Editor and Tornado Server 项目地址: https://gitcode.com/gh_mirrors/qd/qd 还在为复杂的HTTP请求配置而烦恼吗&…

作者头像 李华
网站建设 2026/4/20 2:46:11

Windows右键菜单终极优化指南:10分钟打造高效工作环境

Windows右键菜单终极优化指南:10分钟打造高效工作环境 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为杂乱无章的右键菜单而烦恼吗&#xff1f…

作者头像 李华
网站建设 2026/4/25 7:48:48

4、数字信号处理入门:原理、方法与应用

数字信号处理入门:原理、方法与应用 1. 信号处理领域概述 信号处理主要涉及信号及其所含信息的表示、变换和处理。常见的例子包括从混合观测中提取纯净信号(反卷积),或从含噪观测中提取特定信号(频率)分量(滤波)。在20世纪60年代之前,技术仅允许对信号进行模拟和连续…

作者头像 李华
网站建设 2026/4/27 14:37:18

5分钟搞定专业数据库文档:开源工具database-export的自动化革命

5分钟搞定专业数据库文档:开源工具database-export的自动化革命 【免费下载链接】database-export 基于SpringBoot的开源数据库表结构导出word文档工具 项目地址: https://gitcode.com/gh_mirrors/da/database-export 还在为数据库文档的编写和维护而头疼吗&…

作者头像 李华
网站建设 2026/4/26 8:27:46

Vscode插件开发实战:让代码编辑器也能播放ACE-Step生成的专注音乐

VSCode 插件开发实战:让代码编辑器也能播放 ACE-Step 生成的专注音乐 在开发者日常编码中,背景音乐早已不是“可有可无”的点缀。很多人依赖 Lo-fi、白噪音或轻电子乐来屏蔽干扰、维持心流。但问题也随之而来——打开 Spotify 或 YouTube,切歌…

作者头像 李华