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

相关推荐
yoothey12 小时前
报废审批流规则引擎设计——责任链模式完整实现
linux·开发语言·bash
vortex51 天前
Shell 命令执行知识体系全景解析
linux·运维·bash·shell·命令行
vortex51 天前
Shell 位置参数传递:从入门到“怀疑人生“
linux·bash·shell
scx_link19 天前
通过git bash在本地创建分支,并推送到远程仓库中
开发语言·git·bash
江华森19 天前
高级 Bash 脚本编程指南 — 实战教程
开发语言·bash
承渊政道19 天前
【MySQL数据库学习】(MySQL表的内外连接)
数据库·学习·mysql·leetcode·bash·数据库开发·数据库系统
hyunbar20 天前
配置 Cloudflare Tunnel:把 Mac 上的 Web 服务变成安全域名
网络协议·https·bash
承渊政道20 天前
【MySQL数据库学习】(MySQL复合查询)
数据库·学习·mysql·bash·database·数据库开发·数据库架构
zh路西法22 天前
【tmux入门】终端分屏、SSH远程守护与一键启动脚本
linux·运维·ssh·bash
承渊政道22 天前
【MySQL数据库学习】(MySQL内置函数)
数据库·学习·mysql·ubuntu·bash·数据库开发·数据库系统