bash 中 ${-#*i} 是什么意思?


author: hjjdebug

date: 2024年 12月 25日 星期三 17:43:45 CST

description: bash 中 ${-#*i} 是什么意思?


在centos 的 /etc/profile 中有这样的语句

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do

if -r "$i" ; then

if "${-#\*i}" != "$-" ; then

. "$i" #是交互式shell, 直接source

else

. "$i" >/dev/null #非交互式shell, 将输出重定向到空

fi

fi

done

其中难理解的是:${-#*i}

${-#*i}, 是一个变量置换.

$-: 是一个内置变量,是外壳shell的标志集合,是一个字符串, 我的是himBHs

#是元字符,*也是元字符,i不是元字符,就是字符"i"

是从左侧开始查找并删除匹配的意思,最小匹配 ${parameter#word} :

是最大匹配 ${parameter##word} :

* 是匹配任何字符

i 是字面意义的i字符

if "${-#\*i}" != "$-" 语句含义:

前部分是变量替换,最小匹配删除从开始到i字符为止得到新变量,与原变量相比

不等就是字符串带i, 等于就是字符串不带i

带i, 则说明shell 是interactive 的, 是交互式shell

相关推荐
树下水月9 天前
linux 系统一键巡检sh
bash
橘色的喵25 天前
Claude Code 状态栏脚本:一行显示模型、上下文占用、git 分支和当前目录
linux·git·bash·claude
zhangzeyuaaa25 天前
AI Agent 执行引擎选型指南:PowerShell / Bash 和 Python,边界与最佳实践
人工智能·python·bash
典典分享指南1 个月前
用结构化数据管理产品知识库
scala·bash·batch·actionscript
典典分享指南1 个月前
一品牌多产品线的 GEO 内容矩阵:从策略到落地
java·c#·bash·symfony
tangwangbi1 个月前
Linux 系统配置文件:/etc/profile、~/.bashrc 和 ~/.bash_profile 三者之间的区别与作用
linux·运维·bash
Draw Stars1 个月前
Git BASH安装教程
开发语言·git·bash
vortex51 个月前
一文讲透 Zsh 与 Bash 的区别
开发语言·bash
蜀道山老天师1 个月前
Shell Bash变量与运算符(含条件测试与流程控制)
linux·运维·bash
s_w.h1 个月前
【 计网 】序列化与反序列化
linux·服务器·网络·算法·bash