【问题标题】:How to loop over shell arguments in reverse order?如何以相反的顺序循环shell参数?
【发布时间】:2020-04-30 16:03:28
【问题描述】:

我想在我的 shell 脚本中构建一个循环,在其中我以相反的顺序运行所有参数并在命令中使用它们。如何做到这一点?

我的具体代码是:

#!/bin/sh
for MODULE in "$@"
do
rmmod $MODULE
done
for MODULE in "$@"
do
insmod $MODULE
done
dmesg -c

但我希望第二个 for 循环中的“insmod”使用从 last 到 first 的参数来调用。

【问题讨论】:

  • 需要使用#!/bin/sh,还是假设您将使用bash
  • 最简单的方案是在遍历"$@"的同时倒序构建数组,或者使用C风格的for循环,但/bin/sh不一定支持。跨度>
  • 如何查看我有什么可用的?如果我在要运行它的设备上执行echo $SHELL,我会得到/bin/sh 作为答案
  • 如果/bin/bash 存在,您可以(并且应该)通过将shebang 行更改为#!/bin/bash 在脚本中使用它。然后您就可以使用更多功能。
  • /bin/bash 不存在,感谢澄清

标签: linux shell sh


【解决方案1】:

如果您的目标是纯 sh 而不是 bash,那么您将没有任何数组功能可言。您可以使用递归函数:

#!/bin/sh

resetmods() {
    rmmod "$1"
    [ "$#" -gt 1 ] && (shift; resetmods "$@")
    insmod "$1"
}

resetmods "$@"
dmesg -c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多