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

相关推荐
卫生纸不够用5 小时前
子Shell及Shell嵌套模式
linux·bash
bkspiderx5 小时前
Xshell 和 Xftp 更新提示问题的解决方法及分析
bash·shell·xshell·xftp·破解版本更新
云计算DevOps-韩老师14 小时前
【网络云计算】2024第52周-每日【2024/12/25】小测-理论&实操-自己构造场景,写5个系统管理的脚本-解析
开发语言·网络·云计算·bash·perl
云川之下1 天前
【linux】 unshare -user -r /bin/bash命令详解
linux·bash·unshare
涵信2 天前
Windows11 安装 Ubuntu-20.04,同时安装配置 zsh shell,配置 git 别名(alias),大大提高开发效率
linux·git·ubuntu·bash
云计算DevOps-韩老师2 天前
【网络云计算】2024第52周-每日【2024/12/23】小测-理论&实操
linux·运维·服务器·开发语言·bash
qq_433618443 天前
shell 编程(二)
开发语言·bash·shell
weixin_437398213 天前
Linux扩展——shell编程
linux·运维·服务器·bash
yylの博客3 天前
Windows通过git-bash安装zsh
windows·git·bash·zsh