为何Bash波浪号扩展在引号包含斜杠路径时失效?规则解析
Shell波浪号扩展的生效规则
这是由Bash及多数POSIX兼容shell的波浪号扩展机制决定的,核心规则如下:
- 波浪号
~仅在作为单词的起始字符,且自身未被引号(单/双引号)包裹时,才会触发扩展,替换为当前用户的家目录路径;若~后紧跟用户名(如~user),则扩展为该用户的家目录。 - 当
~被引号直接包裹时,会被当作普通字符处理,不会触发扩展逻辑。
结合你的示例分析:
- 执行
echo ~/"foo"时:~位于单词开头且未被引号包裹(引号仅覆盖foo部分),满足扩展条件,因此~被替换为/home/<username>,最终输出/home/<username>/foo。 - 执行
echo ~"/foo"时:~与后续的/foo一同被双引号包裹,不再符合“未被引号包裹的单词起始字符”要求,因此不会触发扩展,直接输出字面量~/foo。
内容的提问来源于stack exchange,提问作者ValeryC
相关产品推荐
相关产品推荐

