【问题标题】:Passing a variable to sed inside for loop在 for 循环中将变量传递给 sed
【发布时间】:2017-04-01 05:58:43
【问题描述】:

我有一个用这样的脚本编写的 for 循环:

for((i=0;i<${#hours[@]})); do
    dates=("$(last | egrep -v "reboot|wtmp|^$" | sort | tr -s " " | sed "$i q;d" | cut -f5-7 -d' ')")
done

如果我只是在终端中执行分配给dates 的命令,将$i(在 sed 命令中)替换为数字(0,1,2...),它会返回我想要的结果,例如Nov 15 23:15

但是,当在 for 循环内时,我似乎遇到了 sed 命令不递增 $i 的问题。我做错了什么?

【问题讨论】:

  • 您是否尝试为循环的每次迭代附加到数组?
  • 我建议将i=0 替换为i=1
  • @TomFenech 是的,我正在尝试在每次迭代中附加一个日期。
  • @Cyrus 这并不能解决问题,尽管我认为我需要从 1 开始。
  • += 应该在循环中使用而不是 = 来附加每个项目。也就是说,您最好向我们展示您的输入和所需输出的样本,因为可能有一种更简单的方法来获得您想要的结果

标签: bash shell for-loop sed increment


【解决方案1】:

你的问题是你永远不会改变i。您可能应该在 for 声明的第三部分更新它:

for((i=0;i<${#hours[@]};++i)); do
#                       ^^^ here

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多