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

相关推荐
大乔乔布斯20 小时前
AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法
python·bash·ssl
阳光_你好2 天前
解决用git bash终端 tail -f 命令查看日志中文乱码问题
开发语言·git·bash
知忆_IS6 天前
【问题解决】Linux安装conda修改~/.bashrc配置文件后,root 用户下显示 -bash-4.2#
linux·conda·bash
Silber 甜8 天前
MacOS bash&zsh 命令行自动推荐补全工具
开发语言·macos·bash
门前灯8 天前
部分 Bash 内置命令的详解
linux·运维·bash
患得患失9499 天前
【设计模式】策略模式(Strategy Pattern)详解
设计模式·bash·策略模式
jiuri_12159 天前
shell脚本运行方式 bash 和./区别
开发语言·bash
庶生11 天前
deepseek本地部署基于Linux系统(Ubuntu 22.04)Ollama、Cherry Studio和本地知识库系统
linux·python·ubuntu·bash
Arbori_2621511 天前
批量配置Linux ~/.bash_profile
linux·运维·bash