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

相关推荐
wheeldown2 天前
【Linux】【实战向】Linux 进程替换避坑指南:从理解 bash 阻塞等待,到亲手实现能执行 ls/cd 的 Shell
linux·运维·bash
蜀中廖化4 天前
bash:trtexec:command not found
开发语言·bash
我有火的意志4 天前
Liunx执行source /etc/profile 报错, -bash: HISTTIMEFORMAT: readonly variable
开发语言·bash·histtimeformat·readonly
Lynnxiaowen6 天前
今天继续昨天的正则表达式进行学习
linux·运维·学习·正则表达式·云计算·bash
抓饼先生7 天前
Linux control group笔记
linux·笔记·bash
kevin_cat7 天前
微信群机器人-备份文件发送通知
git·bash·企业微信
Lynnxiaowen7 天前
今天继续学习shell脚本
linux·运维·学习·云计算·bash
hmcjn(小何同学)7 天前
轻松Linux-9.进程间通信
linux·运维·服务器·c++·bash
青草地溪水旁8 天前
Git Bash 中 Git 命令的实用主义指南
git·bash
vortex59 天前
常见Bash脚本漏洞分析与防御
开发语言·bash