局部变量赋值的退出状态错误

2023-12-02

下面的例子展示了如果temp_file被制作local作为同一行的一部分mktemp被调用,然后使用检索退出状态$?始终为零,无论命令成功还是失败(mktemp_xyz使用它总是会失败)。如果temp_file被制作local提前然后$?退出状态符合预期。

有人可以解释一下这是怎么回事吗?

#!/bin/bash

test_1()
{
    local temp_file=$(mktemp_xyz -q -t "test.tmp.XXXXXX")
    local make_temp_file_ret_val=$?

    echo "temp_file: $temp_file"
    echo "make_temp_file_ret_val: $make_temp_file_ret_val"
}

test_2()
{
    local temp_file=""
    temp_file=$(mktemp_xyz -q -t "test.tmp.XXXXXX")
    local make_temp_file_ret_val=$?

    echo "temp_file: $temp_file"
    echo "make_temp_file_ret_val: $make_temp_file_ret_val"
}

test_1
echo ""
test_2

输出是:

$ ./test 
./test: line 6: mktemp_xyz: command not found
temp_file: 
make_temp_file_ret_val: 0

./test: line 16: mktemp_xyz: command not found
temp_file: 
make_temp_file_ret_val: 127

Thanks.


local是一个命令本身,而不仅仅是赋值语句的修饰符。在test1,您正在记录的退出状态local命令,不是命令替换中的命令。在test2,你已经分开了local命令从赋值给标记为本地的变量,所以$?包含您期望的退出状态。


不相关,但在将变量标记为本地时不需要初始化该变量。这工作得很好:

local temp_file
temp_file=$(mktemp_xyz -q -t "test.tmp.XXXXXX")

temp_file保持未设置状态,直到您实际为其赋值,但是name一旦你实际分配了一个值,它就是本地的。

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

局部变量赋值的退出状态错误 的相关文章

  • sed:替换文本块

    我有一堆文件 从一段代码开始 我试图用另一个代码块替换 Replace
  • 为什么我不能将 Unix Nohup 与 Bash For 循环一起使用?

    例如 此行失败 nohup for i in mydir fasta do myscript sh i done gt output txt bash syntax error near unexpected token do 正确的做法是
  • Bash 脚本在 for 循环中使用 sed 和变量?

    我正在尝试编写一个 bash 脚本 该脚本需要一些变量 然后使用 grep 对给定文件搜索进行查找 替换 以获取包含该字符串的文件列表 我认为我遇到的问题是在 sed 中看到变量我不确定它可能是什么 if searchFiles a old
  • OS X bash:目录名

    我想创建一个简单的 bash 脚本来在 OS X 上启动 Java 程序 文件名 文件路径和直接工作文件夹都包含空格 当我这样做时 bin sh cd dirname 0 I get usage dirname path 我也尝试过在各种不
  • 如何从 tcl 脚本调用 bash 命令?

    Bash 命令可从交互式 tclsh 会话中获得 例如 在 tclsh 会话中 您可以 ls 代替 exec ls 但是 您不能有一个直接调用 bash 命令的 tcl 脚本 或者没有exec 如何使 tclsh 在解释 tcl 脚本文件时
  • 在詹金斯管道作业中将变量传递给bash脚本

    我有一个 Jenkins 管道作业 其中我使用名为 setup sh 的 bash 脚本配置我的环境 如下所示 bin bash export ARCH 1 echo architecture ARCH 在 Jenkins 管道脚本中 我使
  • awk 在Linux终端中输出类似表格或类似Excel的列?

    我做了一个长管子 最后是 awk print 5 t t 3 t 4 在 Linux 终端中 这些列用选项卡填充 第一列条目具有不同数量的字符 因此第二列结果并不完全垂直 怎样才能让桌子看起来更完美呢 尝试将结果通过管道传输到列 t awk
  • bash - 从文本文件中删除多行不同的文本

    我正在处理大量日志文件 并且大多数日志文件都有大量被记录多次的重复字符串 为了使与此类事情没有太多关系的其他人 也为我自己 轻松查看日志 我想制作一个脚本来删除一些可能对其他人造成 误报 的文本行 嘿管理员 我多次出现这些错误 gt 叹息
  • PS1 定义中的条件 pwd

    我想显示当前工作目录如果我处于symlink比没有 到目前为止我已经 pwd P pwd echo 1 31m pwd P echo 1 32m pwd 将返回所需的输出 但它不能替代 w在命令提示符下 我尝试用反引号括起来 但这只会导致p
  • 为什么 sed 将替换文本放在行首?

    在 Mac OS X bash 上 我在命令行中使用以下 sed sed s S 1 file1 txt gt file2 txt file1 txt有这样的行 some path to somewhere some stuff here
  • 疯狂的 crond 行为。不断使 bash 进程失效

    我有一个看起来像这样的 crontab SHELL bin bash PATH sbin bin usr sbin usr bin MAILTO root HOME 0 59 var www html private fivemin zda
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip
  • 按 bash 中的“最后一个”值分组

    我有一个两列的文件 1 112 1 123 2 123 2 124 2 144 3 158 4 123 4 158 5 123 我需要知道每列 1 的最后一列 2 值 1 123 2 144 3 158 4 158 5 123 如何做到这一
  • bash shell 嵌套 for 循环

    我想编写一个必须在 bash shell 提示符下工作的嵌套 for 循环 在单行命令中嵌套 for 循环 例如 for i in a b do echo i done a b 在上面的例子中 for循环是在单行命令中执行的 像这样 我在
  • 为什么 bash 无法识别套接字文件的存在

    在 Linux 机器上 我想检查特定的套接字文件是否存在 我知道套接字文件存在 但我在 bash 中的检查没有向我显示这一点 ls l var run supervisor sock srwxrw rw 1 root root 0 Jun
  • 如何在shell脚本中每2分钟查找目录中是否有新文件?

    我有一个名为 home user local 每隔两分钟左右 就会有一个新文件转储到此目录中 我需要每 2 分钟检查一次该目录 看看是否有新文件进入其中 如果有新文件 我需要将其列表放入变量中以供稍后使用 我该如何执行这个 shell 脚本
  • printf '%s\n' "${array[@]}" 每个数组元素打印一行是否正常?

    在我的 bash 脚本中 我包含了程序所需的一系列其他文件 然后我在帮助说明中打印这些内容 当我使用 printf 进行输出时 我得到了意想不到的结果 我读到 形式 array 通常是首选的扩展默认形式 所以我从它开始 我的数组声明 scr
  • 从命名管道流式传输音频

    我有一个小型 Python 库 http jdan github io Melopy 用于音频实验 目前该库将原始波形数据写入磁盘 然后我可以将其输入类似afplay播放声音 然而 我很好奇我是否可以直接从记忆中播放音频 我尝试创建一个命名
  • zsh 像 bash 一样迭代

    我最近从 bash 切换到 zsh 但不知道如何实现这一点 bash list aaa gt bbb gt ccc gt ddd for i in list do echo i xxx done aaa xxx bbb xxx ccc xx
  • 使用Curl数据二进制选项,内存不足

    我正在尝试使用curl来上传数据 我需要上传二进制数据 不幸的是 我认为curl首先将文件二进制文件加载到内存中 因此对于大文件来说这是一个问题 我使用的系统的可用内存非常少 因此即使是 8mb 大的文件也很困难 我得到 curl opti

随机推荐

  • XSLT 1.0 比较日期

    我想将当前日期与开始日期和结束日期进行比较 XML is
  • ggplot2:组合绘图时修复轴高度/宽度[重复]

    这个问题在这里已经有答案了 library ggplot2 library gridExtra df1 lt data frame x c A1 A2 A3 A4 something c 10 18 24 32 df2 lt data fr
  • Google App 脚本返回多行数组

    Summary 我是 Google Apps 脚本的新手 但我花了相当多的时间进行研究 但一无所获 基本上我正在尝试复制 SQL 的交叉连接功能 我有 2 个表 一个包含 12 个月的日历表 一个包含 3 个客户的客户表 客户表由 Goog
  • Hive 查询中的时间连接(时间上非常接近的事件)

    我需要一个我很难弄清楚的配置单元查询 我有一个时间序列 如下所示 time source word1 word2 etc 2012 02 01 23 43 16 9988243 0001 2B3B FAF0 2012 02 01 23 43
  • 将三个用例合并为一个用例

    我有一个演员 管理员 他可以对其他用户帐户执行一些操作 例如创建帐户 编辑帐户和删除帐户帐户 我应该做这样的事情 gt UseCase createAccount o gt UseCase DeleteAccount Admin gt Us
  • 对“qInitResources_systray()”的未定义引用

    我用qt官方示例并得到错误 media roroco disk750 Downloads qtbase examples widgets desktop systray main cpp 50 undefined reference to
  • 自动填充用户名和密码 UIWebView Swift

    我发现了很多在 Objective C 中自动填充用户名和密码的方法 但我不知道如何让它与 Swift 一起工作 这段代码的 Swift 等价物是什么 这是否适合我想要完成的任务 谢谢 void webViewDidFinishLoad U
  • 如何判断某个蓝牙设备是否已连接?

    我想使用 applescript 进行定期 每秒 检查以查看是否连接了特定的蓝牙设备 如果是 则弹出快速通知 为了框架它 我想要一个弹出窗口 当我的 Airpods 连接时 因为有时当我把它们拉出来时 它会连接到我的电脑 有时会连接到我的
  • XCode 无法识别环境变量

    我使用以下脚本在 OSX Yosemite 10 10 5 上运行 XCode 7 0 1 7A1001 export FOO bar this should not be necessary but just in case launch
  • 如何配置 Oracle tnsnames 文件位置? [关闭]

    Closed 这个问题是无关 目前不接受答案 我在 Windows 上安装了 Oracle 10g 目前 我的 tnsnames 文件存储在 ORACLEHOME network admin 中 但是 我想将 Oracle 配置为在其他位置
  • 尝试从 C 中的字符串中删除所有数字

    我试图从字符串 char 中取出所有数字 这是我现在所拥有的 Take numbers out of username if they exist don t care about these char newStr strtoul use
  • iPhone,addSubView不调用willViewAppear?

    我正在添加一个视图 addSubView 我也在其他地方使用该视图presentModalViewController viewWillAppear使用presentModalViewController 调用 但不使用addSubView
  • 使用前导下划线真的会带来麻烦吗?

    C C 标准保留所有标识符以下划线开头 如果不在全局命名空间中 则加上大写字母 或包含两个或多个相邻的下划线 例子 int myGlobal namespace mine void Im outta control int LivingDa
  • 为什么 html br 断行标记在此代码中不起作用? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 有人能告诉我为什么我的 php 换行符不起作用 回显 吗 我知道我可以用不同的方式编写代码以使换行符起作用 但我想知道这背后的原因 看来我
  • 为什么iOS坐标系很难理解??只有我?

    我正在研究iOS的UIView 我发现我无法理解边界是如何工作的 For example 请运行此代码 并看到红色框在移动 红框升起来了 白色的根视图是静态的 为什么 为什么红框会上升 请让我知道OTL class ViewControll
  • 互相关

    我一直在尝试找到时移信号响应与作为参考的另一个信号响应之间的互相关性 但发现很难使我的时移反映在 xcorr 函数中 matlab代码粘贴在下面 如果有人能就如何实现xcorr函数提出建议 我将不胜感激 这样我就可以确定两个信号响应相关的时
  • 使用 [].replace 复制数组

    我有一堂课 我正在使用Array shift实例变量上的实例方法 我以为我制作了实例变量的 副本 但事实上我没有并且shift实际上是在改变实例变量 例如 在我期望得到之前 foo bar baz 两次均给出以下信息 class Foo a
  • 使用带有进度报告的 C# 提取 ZipFile

    谁能告诉我是否有可能 如果有的话给出一个例子 如何让进度条 如果可能的话还有状态标签 显示使用 ZipFile Ionic zip http dotnetzip codeplex com 我的 WinForm 在将 ZIP 文件从我选择的路
  • Python-获取日期格式[重复]

    这个问题在这里已经有答案了 我获取一个字符串形式的日期 然后将其解析为日期时间对象 有什么方法可以检查对象的日期格式是什么 假设这是我正在创建的对象 modified date parser parse 2015 09 01T12 34 1
  • 局部变量赋值的退出状态错误

    下面的例子展示了如果temp file被制作local作为同一行的一部分mktemp被调用 然后使用检索退出状态 始终为零 无论命令成功还是失败 mktemp xyz使用它总是会失败 如果temp file被制作local提前然后 退出状态