2026/4/18 11:40:27
网站建设
项目流程
ip动态地址做网站,程序员做情侣网站,设计非常好的网站,徐州网站建设xzqjw在 Shell 脚本中#xff0c;~#xff08;波浪号#xff09;的解析规则需要注意#xff1a;双引号包裹时#xff0c;~ 不会被自动解析为用户家目录#xff0c;直接写 BASE_DIR~/apps 会导致路径变成字面量的 ~/apps 而非实际的家目录路径#xff08;比如 /ho…在 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)关键注意事项引号规则单 / 双引号内的~会被当作普通字符不会解析为家目录无引号 / 仅部分包裹时如~/apps~会被正常解析。容错处理cd命令后加||处理目录不存在的情况避免脚本报错中断跨用户兼容$HOME会自动适配当前执行脚本的用户比如 root 用户的$HOME是/root无需硬编码路径。测试验证执行脚本后若输出类似当前目录/home/你的用户名/apps或/root/apps若以 root 执行则说明路径定义和切换成功。