【问题标题】:Assign value to array if first expression returns an error in bash如果第一个表达式在 bash 中返回错误,则为数组赋值
【发布时间】:2017-11-10 12:29:55
【问题描述】:

我并没有真正了解 shell 并偶然发现了这个问题

我有一个包含文件夹位置的数组和一个包含我要为其获取的值的数组,但文件夹来来去去,所以有时,当我运行检查以获取它们的关联值时,文件夹不是没有了。

我想隐藏 cat 在文件夹不存在时返回的错误,并能够为变量赋予另一个值。

在尝试挖掘了一下之后,我想出了这个,它不起作用,但我一直在尝试的似乎也没有:

userName[i]={ "$(cat "/mainFolder/${userCodes[i]}/name")" } || { "$errorValue"; }

Cat 失败时抛出 No file or directory 错误,并且 "$errorValue" 抛出 ": -1: command not found"

【问题讨论】:

  • 文件中的实际内容是什么?你可能想要IFS= read -r 'userName[i]' < /mainFolder/.../name 之类的东西。
  • @chepner,如果您知道如何在丢失文件的情况下抑制“没有这样的文件或目录”警告(这将由< 操作员抛出),请提供替代答案。您的变体应该比我的变体具有性能优势。

标签: arrays linux bash shell cat


【解决方案1】:

这似乎是您正在寻找的:

userName[i]=$(cat "/mainFolder/${userCodes[i]}/name" 2>/dev/null || echo "$errorValue")

2>/dev/null 隐藏来自cat 的错误消息,而echo 提供默认值。

更新:

“$errorValue”抛出“:-1:找不到命令”

这是因为 bash 会插入变量的值并将其值用作命令的名称。您可以尝试以下操作以了解我在说什么:

some_var='echo'
"${some_var}" 'Hello!'

这会将Hello! 打印到控制台。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多