直接用${var:0:1}取首字符、${var: -1:1}取尾字符,再用[[ ]]安全比较;空串或单字符场景下仍可靠,无需额外判空,但严格要求长度时可用${#var}检查。

直接提取并比较首字符和尾字符即可,不需要复杂工具或循环。
提取首字符和尾字符
Shell 中可通过参数扩展快速取子串:
-
首字符:用
${var:0:1},表示从第 0 位开始取 1 个字符 -
尾字符:用
${var: -1:1}(注意冒号后有空格),表示从末尾倒数第 1 位取 1 个字符
用双中括号做安全比较
推荐使用[[ ]],它天然支持变量展开、不因空值报错,也无需额外引号保护(但加双引号更稳妥):
[[ ${str1:0:1} == ${str2:0:1} ]] && echo "首字符相同"[[ ${str1: -1:1} == ${str2: -1:1} ]] && echo "尾字符相同"- 合并判断:
if [[ ${str1:0:1} == ${str2:0:1} ]] && [[ ${str1: -1:1} == ${str2: -1:1} ]]; then echo "首尾均相同"; fi
处理空字符串或单字符的边界情况
当字符串为空或只有 1 个字符时,${var: -1:1}仍能正确返回(空串取空,单字符取自身),无需额外判空。但若需严格区分“空串无首/尾”,可先检查长度:
[[ ${#str1} -ge 1 && ${#str2} -ge 1 ]] || { echo "至少一个字符串太短"; exit 1; }-
${#var}获取字符串长度,安全可靠
避免用单中括号或 test 命令
[ ] 对子串展开支持弱,且空值易触发[: =: unary operator expected错误;test 同样不支持${var:0:1}语法。坚持用[[ ]]可省去大量转义和容错代码。


















