[英]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.