在我尝试的一堆语言中,函数可以返回相当多类型的值(整数、字符串、各种对象、返回函数的函数等),但在 bash 中,似乎唯一允许的类型是 int,它不应该由其他函数使用,而是由 shell 本身使用来了解是否一切正常(返回 0),或者是否发生了某些错误,在这种情况下,返回的值是错误代码。
例如,假设您要编写一个函数,该函数希望将某些内容返回给另一个函数。你应该怎么做?
假设您要编写一个 findvideos 函数,该函数返回在特定文件夹(及其子文件夹)中找到的每个视频。你想在另一个函数中使用那个函数的结果,你会怎么做?通过回声和管道?
我在写一个像这样的小脚本时被困住了:
function firefoxcache {
cache_dir=$1
videos_dir=$2
videos=$(findallvideos $videos_dir)
for video in $videos; do
echo cp $video $videos_dir/$(basename $video).flv
done;
}
function findallvideos {
videos=$(find $1 -exec file {} \; | grep -i $VIDEOS_REGX | cut -f1 -d:)
#echo $videos
return videos
}
编辑
在 Stackers 的帮助下,这是工作代码(减去愚蠢的双斜线问题):
#!/usr/bin/env bash
function firefoxcache {
cache_dir=$1
videos_dir=$2
echo "$cache_dir", "$videos_dir"
echo
for video in $(findallvideos $cache_dir); do
echo cp $video $videos_dir/$(basename $video).flv
cp $video $videos_dir/$(basename $video).flv
done;
}
function findallvideos {
#echo findallvideos "$1"
for video in $(find $1 -exec file {} \; | grep -i $VIDEOS_REGX | cut -f1 -d:); do
echo $video;
done;
}
firefoxcache $1 $2
# cp /home/chaouche/.cache/mozilla/firefox/qmkhe4mr.default/Cache/4/B6/6AB61d01 VIDEOS//6AB61d01.flv
# cp /home/chaouche/.cache/mozilla/firefox/qmkhe4mr.default/Cache/4/28/A3524d01 VIDEOS//A3524d01.flv
# cp /home/chaouche/.cache/mozilla/firefox/qmkhe4mr.default/Cache/4/D2/29D4Ad01 VIDEOS//29D4Ad01.flv
# cp /home/chaouche/.cache/mozilla/firefox/qmkhe4mr.default/Cache/4/A1/15D75d01 VIDEOS//15D75d01.flv
# cp /home/chaouche/.cache/mozilla/firefox/qmkhe4mr.default/Cache/4/A3/2C971d01 VIDEOS//2C971d01.flv
# cp /home/chaouche/.cache/mozilla/firefox/qmkhe4mr.default/Cache/4/7E/E17D8d01 VIDEOS//E17D8d01.flv
# cp /home/chaouche/.cache/mozilla/firefox/qmkhe4mr.default/Cache/4/AC/5295Dd01 VIDEOS//5295Dd01.flv