bash脚本来反转行

sid*_*nup -1 bash string shell-script

所以我遇到了这个脚本来反转输入行

#! /bin/bash  
input="${1}"  
reverse=""  
len=${#input}  
for(( i=${len}-1; i>=0; i-- ))  
do  
reverse="$reverse${input:${i}:1}"  
done  
echo "$reverse"  
Run Code Online (Sandbox Code Playgroud)

有人可以解释 #input 和 for 循环的作用吗?

小智 6

简化后,你的脚本应该是这样的:

#! bin/bash

input="${1}"    reverse=""

for   (( i=0; i<${#input}; i++ ))
do    reverse="${input:${i}:1}$reverse"
done
echo   "$reverse"
Run Code Online (Sandbox Code Playgroud)

假设您将上面的代码放在一个名为的文件中script.sh并允许它执行:chmod u+x script.sh. 然后,此命令将起作用:

$ ./script.sh 0123456789
9876543210
Run Code Online (Sandbox Code Playgroud)

${#input} 的值是输入的长度(字符数)。
循环从头到尾逐个字符地进行。
为了选择每个字符,脚本使用了一个名为 Substring Expansion 的 bash 工具。
引用man bash(您也可以通过键入访问它man bash):

${parameter:offset:length}
子串扩展。从 offset 指定的字符开始,最多扩展到参数的 length 个字符。

这意味着i依次选择位置处的每个字符以重新创建reverse变量上的字符串。

但是你不需要任何循环或花哨的编码来做到这一点。这个简单的行将做完全相同的事情:

$ echo "0123456789" | rev
9876543210
Run Code Online (Sandbox Code Playgroud)