在bash脚本中,我具有以下功能来计算目录中文件的数量。
file_count() {
no_of_files=$(find "$1" -maxdepth 1 -type f -printf '.' | wc -c)
}
我想在不同的目录上重复使用它,并将计数保存到每个目录的变量中。目前,我使用
file_count $somedir
files_in_somedir="$no_of_files"
我知道我no_of_files
每次都会在函数外部设置变量,并且希望将其设置为函数的局部变量,而不是在主脚本中设置中间变量。以防万一出现一些错误,这意味着变量在函数调用之间不会发生变化(可能是错误键入函数名称),并且使用了旧值no_of _files
。
如果我的职能是:
file_count() {
local no_of_files=$(find "$1" -maxdepth 1 -type f -printf '.' | wc -c)
}
我如何轻松设置这些目录计数变量?
Bash函数不像其他编程语言上的函数,它们更像命令。这意味着它们没有经典的返回值,但是
退出/返回码。这是一个介于0到255之间的整数,其中0表示“成功”,每隔一个值表示一个错误。如果您尝试指定一个超出此范围的数字,它将以256为模(从您的数字加或减255直到它适合0-255的范围)。
除非您使用以下return
命令手动设置该代码,否则该代码将自动设置为在函数内部执行的最后一条语句的返回代码:
return 1
输出流。每个Bash函数都可以像正常脚本一样将任意字符串写入输出流(STDOUT和STDERR)。输出可以直接来自函数中运行的命令,也可以使用手动设置echo
。
但是,您可以在运行函数时捕获它,而不是让该输出显示在控制台中,例如使用Bash的命令替换语法,并将其存储在主脚本中的变量中:
example_function() {
# do something useful
echo "return this message"
}
returned_value="$(example_function)"
因此,您的代码将必须如下所示:
file_count() {
find "$1" -maxdepth 1 -type f -printf '.' | wc -c
# the line above already prints the desired value, so we don't need an echo
}
files_in_somedir="$(file_count "$somedir")"
有关更多信息,请参见bash脚本中的返回值(在堆栈溢出中)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句