繁体   English   中英

以相反的顺序打印 bash 参数

[英]Print bash arguments in reverse order

我必须编写一个脚本,它将接受所有参数并反向打印它们。

我已经做了一个解决方案,但发现它很糟糕。 你有更聪明的想法吗?

#!/bin/sh
> tekst.txt

for i in $* 
do
    echo $i | cat - tekst.txt > temp && mv temp tekst.txt
done

cat tekst.txt

可以这样做

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

这使用以下
c 风格的循环
参数间接扩展${!i}朝页面底部)

$#是脚本的参数数量

你可以使用这个衬垫:

echo $@ | tr ' ' '\n' | tac | tr '\n' ' '

重击:

#!/bin/bash
for i in "$@"; do
    echo "$i"
done | tac

将此脚本称为:

./reverse 1 2 3 4

它会打印:

4
3
2
1

用空格反转一个简单的字符串

简单地:

#!/bin/sh
o=
for i;do
    o="$i $o"
    done
echo "$o"

将作为

./rev.sh 1 2 3 4
4 3 2 1

或者

./rev.sh world! Hello
Hello world!

如果需要逐行输出

只需用printf "%s\\n"替换echo

#!/bin/sh
o=
for i;do
    o="$i $o"
    done

printf "%s\n" $o

反转字符串数组

如果您的参数可能包含空格,则可以使用 bash 数组:

#!/bin/bash

declare -a o=()

for i;do
    o=("$i" "${o[@]}")
    done

printf "%s\n" "${o[@]}"

样本:

./rev.sh "Hello world" print will this
this
will
print
Hello world

便携和 POSIXly,没有数组并使用空格和换行符:

反转位置参数:

flag=''; c=1; for a in "$@"; do set -- "$a" ${flag-"$@"}; unset flag; done

打印它们:

printf '<%s>' "$@"; echo

暂无
暂无

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

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