关于${ }的用法-Linux shell编程小记

2023-11-04

关于${ }的用法-Linux shell编程小记

1.替换、裁剪

在shell编程中,当遇到需要将某个字符串进行替换或者裁剪时,我们首先想到的是sed和awk,但是sed和awk的功能都太强大了,当只是简单的对某个字符串进行替换裁剪时,我们可以使用${}来完成。

替换

替换的格式为 ${变量/|//被替换字符/替换字符}

file=/home/test/test.sh
#将第一个test替换为tty1
filename=${file/test/tty1}

#将所有的test替换为tty1
filename=${file//test/tty1}

裁剪

裁剪的格式为${变量#(##)|%(%%)正则表达式}

#删除第一个/左边的所有字符
filename=${file#*/}
#删除第一个/右边的所有字符
filename=${file%/*}
#删除最后一个/左边所有字符
filename=${file##*/}
#删除最后一个/右边所有字符
filename=${file%%/*}

例子中/可以按照实际要求更换,例如

#删除第一个.左边的字符
filename=${file#*.}

如果字符串有规律,只需要输出固定位置的字符串,可以使用${变量:起始位置:长度}

#取出字符串第3-7个字符
filename=${file:2:4}
echo ${filename}
#>ome/

有个小技巧,在你无法分辨左右与符号对应时,可以看看键盘
在这里插入图片描述
#在$的左边,所以是删除分隔符左边的内容;%在$的右边,所以是删除分隔符右边的内容

2.针对不同状态赋值

在编程时,如果用户没有在要求位置输入内容或在运行中某个变量没有获取到值,可能会造成脚本出现停止或其他错误,所以在编程时需要对一些变量进行限制。

表达式 没设定 空值 非空值
${file-host} 使用host作传回值 不处理 不处理
${file:-host} 使用host作传回值 使用host作传回值 不处理
${file=host} 使用host作传回值且将file赋值为host 不处理 不处理
${file:=host} 使用host作传回值且将file赋值为host 使用host作传回值且将file赋值为host 不处理
${file?host} 將host輸出至STDERR 不处理 不处理
${file:?host} 將host輸出至STDERR 將host輸出至STDERR 不处理
${file+host} 不处理 使用host作传回值 使用host作传回值
${file:=host} 不处理 不处理 使用host作传回值

针对不同要求,可以选择不同的表达式对值进行控制,来保证变量的值。

3.计数

通过${#变量}可以对变量的长进行计数:

echo ${#file}
#>18
#因为file总共有18个字符
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于${ }的用法-Linux shell编程小记 的相关文章

  • 如何仅将整个嵌套目录中的头文件复制到另一个目录,在复制到新文件夹后保持相同的层次结构

    我有一个目录 其中有很多头文件 h 和其他 o 和 c 文件以及其他文件 这个目录里面有很多嵌套的目录 我只想将头文件复制到一个单独的目录 并在新目录中保留相同的结构 cp rf oldDirectory newDirectory将复制所有
  • shell脚本“x$VARIABLE”中x的用途[重复]

    这个问题在这里已经有答案了 我正在查看一些 shell 脚本 comarison shcu 中 x 的用途是什么 if x USER x RUN AS USER then su RUN AS USER c CATALINA HOME bin
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 如何替换“docker run”命令中的变量值

    我正在使用 bash 脚本并尝试分配指纹值 如下所示 export FINGERPRINT D0 19 C5 80 42 66 56 AC 6F docker run rm i v var run docker sock var run d
  • 为什么减法返回 - 符号

    我对简单的减法有疑问 但我不明白出了什么问题 我的代码 start date s N cut b1 13 Treatment end date s N cut b1 13 delta expr end start echo delta de
  • 如何在 Xcode 4.2 中创建 Shell 脚本目标?

    我想知道是否有人知道 XCode 4 1 如何创建 shell 脚本 该选项不存在 但在最新版本中可能会被称为其他名称 塔 在导航器中选择您的项目 单击 添加目标 为空目标选择 聚合 添加构建阶段 gt 添加运行脚本 单击构建阶段并编辑运行
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • ReferenceError:MongoDB shell 中未定义 require

    我尝试通过 Windows 命令 Windows 8 1 从 Mongo 客户端连接 MongoDB 当我使用require 在 javascript 中 我遇到如下错误 有人有同样的问题吗 我有错过任何一个吗require有关的npm安装
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • C程序调用shell脚本

    我有一个小型 C 程序 调用 shell 脚本 myScript sh 我得到的 ret 值为 256 请帮助我了解系统调用出了什么问题 int main int ret ret system myScript sh ret gt gt r
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • sed 错误“未终止的 's' 命令”故障排除

    我正在构建一个script https stackoverflow com questions 4036832 replacing a specific term in an xml file其中 它将用文件夹路径替换 XML 文件中的模式
  • 在 bash 脚本中提取 XML 值 [重复]

    这个问题在这里已经有答案了 我正在尝试从 xml 文档中提取一个值 该文档已作为变量读入我的脚本中 原始变量 data is
  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的

随机推荐