以相反的顺序打印bash参数

问题描述 投票:1回答:4

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

我已经找到了解决方案,但发现它非常糟糕。你有更明智的想法吗?

#!/bin/sh
> tekst.txt

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

cat tekst.txt
bash
4个回答
3
投票

可以做到这一点

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

这使用以下 c style for loop Parameter indirect expansion${!i}towards页面底部)

$#这是脚本的参数数量


1
投票

你可以用这个衬垫:

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

1
投票

Reversing a simple string, by spaces

只是:

#!/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!

If you need to output one line by argument

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

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

printf "%s\n" $o

Reversing an array of strings

如果你的参数可以包含空格,你可以使用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

0
投票

庆典:

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

称这个脚本如下:

./reverse 1 2 3 4

它将打印:

4
3
2
1
© www.soinside.com 2019 - 2024. All rights reserved.