繁体   English   中英

在 bash 脚本中反转命令行参数

[英]Reverse Command Line Parameters in a bash script

我必须为我的编程 class 编写一个简单的 bash 脚本。 这个想法是使用带有$*的 for 循环(文件名作为命令行参数)。 任务是在仍然使用for inFile in $*; do for inFile in $*; do循环。

我不知道该怎么做。

#!/bin/bash

for inFile in $*;do
  echo $inFile
done

我知道这不起作用,它只是按顺序打印出命令行参数。

如果要反转位置参数, $*是不合适的。 考虑这个脚本:

for arg in $*; do
    echo "$arg"
done

当你运行bash script.sh foo 'bar baz'你会得到:

 foo bar baz

您正在寻找"$@"代替:

for arg in "$@"; do
    echo "$arg"
done

对于相同的参数,这将产生:

 foo bar baz

您可以在man bash特殊参数部分阅读有关这些变量的更多信息。


现在,如果您想以相反的顺序打印参数,您可以使用计数循环:

for ((i = $#; i > 0; i--)); do
    echo "${!i}"
done

${!varname}语法用于扩展为$i指示的变量的值。 例如,当脚本有 10 个参数时,我们要打印${10}$9$8等,直到$1


与前面的示例一样,使用$@的索引可能会很棘手。 如果将$@的内容存储在常规数组中,可能会更容易理解:

arr=("$@")
for ((i = ${#arr[@]} - 1; i >= 0; i--)); do
    echo "${arr[i]}"
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM