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

相关推荐
YuanDaima20486 小时前
Docker 工程化安装与核心命令实战
运维·人工智能·docker·微服务·容器·bash
山岚的运维笔记1 天前
Bash 专业人员笔记 -- 第 11 章:`true`、`false` 和 `:` 命令
linux·运维·服务器·开发语言·笔记·学习·bash
彩色的黑'''4 天前
[root@localhost ~]#,Linux系统的命令提示符为啥现在变成-bash-4.2#了,哪里设置的
linux·运维·bash
zhangfeng11334 天前
scp 命令的使用方法 什么软件支持 .git bash xshell .openssh
开发语言·git·bash
鸠摩智首席音效师5 天前
如何在 Bash 中通过 Amazon SES 发送电子邮件 ?
开发语言·bash
IMPYLH8 天前
Linux 的 uname 命令
linux·运维·服务器·数据库·bash
墨倾许8 天前
从零搭建运维学习环境(2026):WSL + Docker + Git + VS Code 完全指南
运维·git·学习·docker·容器·bash
IMPYLH8 天前
Linux 的 tty 命令
linux·运维·服务器·bash
菜菜艾9 天前
自动化环境补丁更新系统
linux·运维·bash·运维开发
逐梦苍穹9 天前
Claude Code调用Codex失败复盘:从10个Agent、0次codex exec到Bash-only Worker + Hook强制委托
开发语言·chrome·bash