Ali*_*rdy 13 linux shell bash variable
所以如果我有一个变量
VAR='10 20 30 40 50 60 70 80 90 100'
Run Code Online (Sandbox Code Playgroud)
并呼应出来
echo "$VAR"
10 20 30 40 50 60 70 80 90 100
Run Code Online (Sandbox Code Playgroud)
但是,在脚本的进一步下方,我需要颠倒此变量的顺序,以便它显示为类似
echo "$VAR" | <code to reverse it>
100 90 80 70 60 50 40 30 20 10
Run Code Online (Sandbox Code Playgroud)
我尝试使用 rev 并且它实际上颠倒了一切,所以它出来了
echo "$VAR" | rev
001 09 08 07 06 05 04 03 02 01
Run Code Online (Sandbox Code Playgroud)
Ipo*_*cer 22
在 GNU 系统上,cat 的反面是 tac:
$ tac -s" " <<< "$VAR " # Please note the added final space.
100 90 80 70 60 50 40 30 20 10
Run Code Online (Sandbox Code Playgroud)
对于短列表和变量,shell 本身是最快的解决方案:
var="10 20 30 40 50 60 70 80 90 100"
set -- $var; unset a
for ((i=$#;i>0;i--)); do
printf '%s%s' "${a:+ }" "${!i}"
a=1
done
echo
Run Code Online (Sandbox Code Playgroud)
输出:
100 90 80 70 60 50 40 30 20 10
Run Code Online (Sandbox Code Playgroud)
注意:拆分操作set -- $var对于此处使用的确切字符串是安全的,但如果字符串包含通配符(*,?或[]),则不会如此。set -f如果需要,可以在拆分之前避免使用。同样的注释也适用于以下解决方案(除非另有说明)。
或者,如果您想使用反向列表设置一些其他变量:
var="10 20 30 40 50 60 70 80 90 100"
set -- $var
for i; do out="$i${out:+ }$out"; done
echo "$out"
Run Code Online (Sandbox Code Playgroud)
或者仅使用位置参数。
var="10 20 30 40 50 60 70 80 90 100"
set -- $var
a=''
for i
do set -- "$i${a:+ $@}"
a=1
done
echo "$1"
Run Code Online (Sandbox Code Playgroud)
或者仅使用一个变量(可能是 var 本身):
注意:此解决方案不受 globing 或 IFS 的影响。
var="10 20 30 40 50 60 70 80 90 100"
a=" $var"
while [[ $a ]]; do
printf '<%s>' "${a##* }"
var="${a% *}"
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1779 次 |
| 最近记录: |