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)