Linux 在Bash中使用函数进行反转
我正在尝试在Bash中创建一个Linux 在Bash中使用函数进行反转,linux,bash,fedora,Linux,Bash,Fedora,我正在尝试在Bash中创建一个reverse函数,其中它将使用main函数和reverse函数反转一个目录或一个项目数组作为参数。我认为我的main函数出错了,或者我无法调用我创建的reverse函数。我对Bash也不是很熟悉 #!/bin/bash function reverse(){ input=$1 #1st parameter copy=${input} len=${#copy} for((i=$len-1;i>=0;i--)); do
reverse
函数,其中它将使用main
函数和reverse
函数反转一个目录或一个项目数组作为参数。我认为我的main
函数出错了,或者我无法调用我创建的reverse
函数。我对Bash也不是很熟悉
#!/bin/bash
function reverse(){
input=$1 #1st parameter
copy=${input}
len=${#copy}
for((i=$len-1;i>=0;i--)); do
if [ $i = "[" ]; then
continue
fi
rev="$rev${copy:$i:1}"
done
echo "var: $var, rev: $rev"
}
function main(){
arr=( tiger lion bear )
mydir = $arr
reverse $mydir
echo $reverse
# should print: bear lion tiger
}
main
您的代码有两个大问题:
mydir
时,可能需要复制整个数组。但是您分配$arr
,这与只分配第一个元素${arr[0]}
相同。引述:
引用不带下标的数组变量等同于引用下标为0的数组变量
您应该使用mydir=(“${arr[@]}”)
to,然后使用类似的构造将整个数组传递给reverse
函数。但是您根本不必复制数组,这个main
就足够了:
function main(){
arr=( tiger lion bear )
reverse "${arr[@]}"
}
reverse
的实现会反转其第一个参数中的字母,即现在所称的arr
数组的第一项。您应该反转数组。它将存储在函数的参数中。您可以通过params=(“$@”)
以params
数组的形式获取函数的所有参数- shell中变量赋值的
周围不能有空格。分配给=
时,它们位于mydir
中。这就是为什么Bash可能会打印一个错误,说明它找不到任何名为main
的命令。每个shell将命令行拆分为多个单词,并将第一个单词作为命令名mydir
- 您的
函数不必要地复制reverse
变量–当然,除非您真的想像现在这样在末尾打印原始值。但是,我宁愿将内容复制到名为输入
的变量中,然后处理original
变量,因为这样会更容易理解其意图input
- 在shell中展开变量的任何地方,都应该在双引号内展开它,除非您有充分的理由这样做,并且您知道自己在做什么。如果将其展开到双引号之外,则会遇到转义错误的问题。保护内部大多数特殊字符不被shell解释,只允许变量、命令、算术和历史扩展
- 在
中的循环中,reverse
应该包含一个数字。测试字符串是否等于i
,这是毫无意义的。这种情况总是错误的[
- 您从不初始化
变量,但在var
正文末尾的reverse
语句中使用它的值 在首次使用echo
变量之前,您也不会指定该变量的值。由于默认情况下所有变量都为空,并且您只使用了一次rev
,因此这不是一个问题,但仍然不是一个好的做法 另一个没有初始化的变量是reverse
,位于reverse
的最后一行。shell中的函数调用只返回状态,与任何其他命令类似。您可以修改(全局)函数中的变量,但您不这样做。因此,main
末尾的main
命令是无用的echo
即使你是一个shell初学者,我已经告诉了你足够多的信息来找出
reverse
的正确实现。如果你再次阅读,一切都应该是清楚的。如果不是,请评论,我将尝试给你更多的指导。@Palec输出应该是数组或目录中每个成员的反转。所以对于考试来说如果你有“老虎-狮子-熊”,它会返回“熊-狮子-老虎”。我不需要反转看起来的单词,但需要重新定位它们?在shell的变量赋值中,在=
周围不能有空格。当赋值到mydir
@Palec时,它们在main
中。感谢您指出这一点。它现在正在工作。但是,我只需要找出如何按顺序反转它们d不是按字符。你能将它们存储在数组中并在bash中向后打印位置吗?你将它们存储在数组中,是的,你可以直接对它们进行索引,是的,这意味着你可以得到数组的长度,并以相反的方式填充新的数组。@Palec这是一个一般性的问题,不是针对你,而是针对一般的since我不熟悉bash,我只是想了解更多信息,以便我能自己理解和理解并学习。我不是要求任何人帮我解决这个问题,而是要求提供一些提示或一些事情的解释。你有没有任何资源或链接,我可以参考你认为有用的bash?不是bash参考手册或者。非常感谢您提供的所有这些详细信息,而不是为我写的。我是一个初学者,在这里使用bash和一些语法和方法,而不是其他语言,有时会让我绊倒。我真的很感谢您的详细解释和参考手册。总的来说,我只是想学习,因为我从长远来看,这将使我受益终生,但我想看看我是否