You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Sh Shell中将命令输出存入数组的问题求助

解决Sh Shell中命令输出存入数组的问题

你的脚本出现问题的核心是Sh(POSIX shell)的数组语法和Bash有差异,以及变量引用的写法错误。我来帮你一步步解决:

问题根源

你写的start_time=$cmd[0]在Sh中会被解析为:先展开变量$cmd(在支持数组的Sh实现里,$cmd默认会输出数组的所有元素),然后拼接字符串[0],这就是为什么你得到1572443382 1572443386[0]的原因。

另外,虽然部分Sh实现(比如dash)支持数组,但必须用正确的语法引用元素。

解决方案

根据你的需求,有两种可靠的方法:

方法1:使用Sh兼容的数组语法(适用于支持数组的Sh)

只需修正变量引用的写法,用${数组名[索引]}的格式来访问数组元素:

#!/bin/sh
cmd=($(date +%s;sleep 5; date +%s))
start_time=${cmd[0]}  # 用大括号包裹数组引用
end_time=${cmd[1]}
echo $start_time

方法2:纯POSIX兼容写法(适用于所有Sh环境)

如果你的Sh完全不支持数组(严格POSIX标准),可以用位置参数来存储多个值,这是最通用的方式:

#!/bin/sh
# 用set --将命令输出的分词设置为位置参数$1、$2...
set -- $(date +%s;sleep 5; date +%s)
start_time=$1
end_time=$2
echo $start_time

或者用换行分隔存储,再通过head/tail提取:

#!/bin/sh
# 先保存命令的完整输出
output=$(date +%s;sleep 5; date +%s)
# 提取第一行作为开始时间
start_time=$(echo "$output" | head -n1)
# 提取最后一行作为结束时间
end_time=$(echo "$output" | tail -n1)
echo $start_time

这两种方法都能让你正确获取到开始时间,完全符合Sh的语法规范。

内容的提问来源于stack exchange,提问作者Milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:54:51