bash:从数组中删除变量? [复制]

2024-05-01

#!/bin/bash

tank=(one two three)
x=two

unset tank[${x}]
echo ${tank[*]}

我想从数组中删除 x 但不知何故它删除了数组的第一个元素。我该如何解决这个问题?


您有一个索引数组,因此[...]被视为算术表达式来生成整数索引。此类表达式中的字符串被假定为参数名称,未定义的参数计算为零。自从two未定义,您的尝试被评估为

unset tank[${x}] -> unset tank[two] -> unset tank[0]

要安全地从数组中删除项目,您需要遍历该数组,将不匹配的项目复制到新数组,然后将新数组分配回旧名称。这可以防止拆分可能包含空格的数组元素。

x=two
new_tank=()
for i in "${tank[@]}"; do
    if [[ $i != $x ]]; then
        new_tank+=("$i")
    fi
done
tank=( "${new_tank[@]}" )

更简洁的是,正如 gniourf_gniourf 所指出的:

for i in "${!tank[@]}"; do
    [[ ${tank[i]} = $x ]] && unset tank[i]
done

根据您的应用程序的不同,您可能需要考虑使用关联数组。

declare -A tank
tank=([one]=1 [two]=2 [three]=3)   # Using the keys as the actually elements
x=two
unset tank[$x]
# Prove that two is really gone, with no hole left behind.
for i in "${!tank[@]}"; do
   echo "$i"
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash:从数组中删除变量? [复制] 的相关文章

  • BASH 中的空函数

    我正在使用 FPM 工具创建 deb 包 此工具在从支持的文件中删除包之前 之后创建 不幸的是FPM生成的bash脚本包含这样的函数 dummy 该脚本退出时出现错误 语法错误 意外 BASH 不允许空函数吗 哪个版本的 bash linu
  • 将变量插入 sh 脚本命令[重复]

    这个问题在这里已经有答案了 bin sh f set proj dir OutputDir for projname in lib proj1 proj2 do mv scripts projname BYTECODE proj dir s
  • 从命令行更改 konsole 选项卡标题并使其持久?

    如何更改 konsole 选项卡标题 默认情况下 它设置为 u n 所以它总是自动改变 我可以这样设置 qdbus org kde konsole KONSOLE DBUS SESSION setTitle 1 My Title 但是一旦您
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • 打印本周星期一的日期(在 bash 中)

    我想获取本周星期一的 YYYYMMdd 格式的日期 例如 今天是 20110627 从明天到周日 我仍然想打印周一 今天 的日期 然后下周重复这个过程 monday date dmonday Y m d last monday date d
  • 如何在 Bash 脚本中查找数字的阶乘?

    在 shell 脚本中如何查找数字的阶乘 seq s 1 500 bc
  • 通过 ssh 运行 Bash 脚本

    我正在尝试编写一个 Bash 脚本 它将通过 SSH 连接到计算机并创建一个目录 长期目标有点复杂 但现在我从简单的开始 然而 虽然很简单 但我似乎不太明白 这是我的代码 bin bash ssh T email protected cdn
  • HBase Shell 日志记录

    使用 HBase shell 时 我收到大量日志记录 包括 INFO 和 DEBUG 消息 虽然这对于学习 HBase 内部结构来说很有趣 但它非常冗长并且可能会掩盖输出 我尝试过以多种不同的方式更改日志记录级别 包括所描述的here ht
  • Bash 目录上的 For 循环

    快速背景 ls src file1 file2 dir1 dir2 dir3 Script bin bash for i in src do if d i then echo i fi done Output src dir1 src di
  • BASH 中带有千位分隔符的数字格式

    我有一个号码12343423455 23353 我想用千位分隔符格式化数字 所以输出将是12 343 423 455 23353 printf 3f n 12345678 901 12 345 678 901
  • 如何在不使用 MacPorts 或 Fink 的情况下在 OS X Leopard 上安装 lxml?

    我过去曾多次尝试过此操作并遇到问题 有没有人有在没有 MacPorts 或 Fink 的情况下在 OS X 上安装 lxml 的方法 并且绝对有效 最好有完整的 1 2 3 步骤来下载和构建每个依赖项 感谢 Twitter 上的 jesse
  • shell脚本中是否有互斥/信号量机制?

    我正在 shell 脚本中寻找互斥 信号量 并发机制 考虑以下情况 除非 a 用户不关闭共享文件 否则 b 用户应该无法打开 更新它 我只是想知道如何在 shell 脚本中实现互斥量 信号量 临界区等 在 shell 脚本中实现锁定机制 文
  • 将儒略时间戳转换为 UNIX 中的常规时间

    我需要使用 Bash 将 UNIX 中的 Julian 时间戳转换为常规时间戳 在 Tandem OS 上 转换非常简单 例子 212186319010244541 OLSAPP SYSTST 1 gt interprettimestamp
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • 在bash中用其他文件过滤一个文件

    我有一个带有数字的文件 例如 cat file 31038467 32048169 33058564 34088662 35093964 31018168 31138061 31208369 31538163 31798862 和其他例如
  • 如何从 Linux 命令行确定 LCD 显示器是否打开

    如何通过 Linux 命令行判断计算机的显示器是否打开 关闭 我传统上认为显示器是仅输出的设备 但我注意到 Gnome 显示器首选项对话框具有 检测显示器 功能 这可以推广到确定显示器是否物理关闭吗 VESA DDC 连接是I2C http
  • 在 bash 中快速引用 stdout(即上一个命令的输出)?

    有没有办法快速 例如通过键盘快捷键等 引用写入到 stdout 的上一个命令的输出 例如 如果我这样做 which rails 它回来了 usr local bin rails然后我想在 textmate 中打开该文件 我可以像这样重新输入
  • 如何使用 exec.Command 在 golang 中执行 Mysql 脚本

    您好 我正在尝试执行一个脚本以使用 Golang 将数据填充到数据库中 func executeTestScript cmd exec Command usr local mysql bin mysql h127 0 0 1 P3333 u
  • 如何使用 Perl 在 Unix 中获取文件创建时间

    如何使用 perl 在 unix 中获取文件创建时间 我有这个命令显示文件的最后修改时间 perl MPOSIX le print strftime d b Y H M localtime lstat 9 for ARGV file txt
  • 编写一个 shell 脚本,find-greps 并在 1 行中输出文件名和内容

    要查看所有包含 abc 的 php 文件 我可以使用这个简单的脚本 find name php exec grep l abc 我可以省略 l 并且提取部分内容而不是文件名作为结果 find name php exec grep abc 我

随机推荐

  • caret::train:为 mlpWeightDecay(RSNNS 包)指定更多非调整参数

    我在使用插入符号包和 RSNNS 包中的 mlpWeightDecay 方法指定学习率时遇到问题 mlpWeightDecay 的调整参数是大小和衰减 将大小保持为 4 并在 c 0 0 0001 0 001 0 002 上调整衰减的示例
  • R 函数查找拟合常数的合适值

    library ggplot2 set seed 1 dataset lt data frame X rnorm 1000 dfun lt function x a b 1 sqrt 2 pi b exp 0 5 x a 2 2 b 2 g
  • 为什么我没有这个类,而它应该在 rt.jar 中?

    所以 我正在尝试在 java 中实现 LDAP 连接 这需要com sun jndi ldap LdapCtxFactory 贾芬德表明LdapCtxFactory应包含在rt jar 据我了解 这是java SDK的基础 Eclipse
  • 如何将参数传递给 ActiveModel 序列化器

    我在用着主动模型序列化器 https github com rails api active model serializers 我有一个模型活动 其中有很多活动 我想返回前 n 个活动的事件 我想我应该将参数 n 传递给事件序列化器 版本
  • 尝试将稀疏 df 保存到 hdf5 时,获取“SparseDtype”对象没有属性“itemsize”?

    我正在尝试将大型稀疏数据帧保存到 hdf5 文件 但出现归因错误 one hot pd get dummies my DF columns cat sparse True one hot to hdf content data h5 tab
  • “箭头函数”和“函数”是否等效/可互换?

    ES2015中的箭头函数提供了更简洁的语法 我现在可以用箭头函数替换所有函数声明 表达式吗 我需要注意什么 例子 构造函数 function User name this name name vs const User name gt th
  • 如何在AWS批处理中定义根卷大小

    我正在使用 AWS Batch 但发现根卷大小对于我的任务来说太小 我尝试创建一个新的计算环境 作业队列 但没有任何选项来设置卷大小 我尝试更改启动配置here https console aws amazon com ec2 autosc
  • Eclipse 编辑器选项卡环绕

    I can switch editors in Eclipse by using Ctrl PgUp PdDown 但是 当选择最左边的编辑器选项卡时 我无法再将一个选项卡切换到左侧并环绕以到达最右边的选项卡 如何使编辑器选项卡环绕 The
  • 用 Java 创建 PDF 的缩略图

    我正在寻找一个 Java 库 它可以获取 PDF 并从第一页创建缩略 图 PNG 我已经看过 JPedal 但其疯狂的许可费完全令人望而却步 我目前正在使用 iText 来操作 PDF 文件 但我相信它不会生成缩略图 我可以在命令行上使用
  • 如何使用Node+Express渲染多个视图

    我有一个 header html 和一个 footer html 我希望与其他视图一起呈现 我想使用 Node Express 来完成这个任务 我尝试通过以下方式渲染视图 但显然它不起作用 var express require expre
  • Javascript 图像 src 属性返回错误值

    我有一些 javascript 代码附加到一个带有 onclick 的按钮 代码如下 function ondelete var getDiv document getElementById imgdiv var lb img imgdiv
  • iPhone:应用程序被终止时保留 NSUserDefaults 值

    我正在尝试使用 NSUserDefaults 实现 添加到收藏夹 功能 到目前为止我已经编写了以下代码 void favouriteButtonClicked id sender favselected favselected favsel
  • 如何在 Anaconda 中使用 Python Dbus 绑定

    我正在尝试在 Anaconda python 环境上安装 dbus 但我很挣扎 这是我收到的错误消息 e gateway python Python 3 5 4 Anaconda custom 64 bit default Oct 13 2
  • 在intellij中为java启用ssl调试

    从我的问题开始 上一期尝试通过 tls ssl 发送 java 邮件 https stackoverflow com questions 39259578 javamail gmail issue ready to start tls th
  • 在python中乘以多维数组

    我在 3d 数组中存储了许多 2d 数组 我需要将每个数组与一个向量相乘 所以我将所有这些向量存储在一个二维数组中 就像这样 A np random random L M N B np random random L M 我需要将每个 A
  • 使用 jQuery 测试某个元素是否具有某个类

    我正在尝试测试课程是否存在intra field label在一个元素上 该元素将有多个类 我该怎么做 Use hasClass http api jquery com hasClass http api jquery com hasCla
  • C# Winforms - ProgressBar 无法正确显示和重置

    我有一个 Windows 桌面应用程序 正在使用 Visual Basic 中的 Windows 窗体编写 在这个应用程序中 我想显示一个简单的进度条 但我遇到了一个奇怪的问题 下面是更新进度条的简单 for 循环示例 pBar Visib
  • 我什么时候应该在 RMI 中实现 java.io.Serializable?

    我刚刚开始 Java RMI 对于何时使用 java io Serialized 存在一些问题 所以任何人都可以给我一个必须实现 java io Serializing 的 RMI 示例 谢谢 UPDATE i had made a sim
  • 单元格显示日期但不显示时间

    在我的 Excel 工作表中 我在一个单元格中添加了日期和时间 如下所示 在顶部 在效果栏中 它显示日期和时间 问题是 在单元格中它只显示日期 但我希望时间和日期都显示在单元格中 谁能帮我这个 选择 ColumnB 主页 gt 单元格 格式
  • bash:从数组中删除变量? [复制]

    这个问题在这里已经有答案了 bin bash tank one two three x two unset tank x echo tank 我想从数组中删除 x 但不知何故它删除了数组的第一个元素 我该如何解决这个问题 您有一个索引数组