如何bash将命令作为参数传递给在子shell中运行的函数



这是我的bash脚本。我想传递一个命令作为参数并运行它。

  • 情况1(不起作用
  • 案例2(运行良好

我如何使案例1(起作用?

function menu(){
echo "[$@]"
declare -a myarray
while IFS= read -r input; do
result_array+=( "$input" )
((count++))
printf "[$count] %sn" "${input[0]}"
done < <( $@ ) ########### case1) I want to use but it is not working.
## done < <( "find . -name '*.bak'" ) ########## case2) working well 
}

## main 
menu "find . -name '*.bak'" 

我尝试了我所知道的每一个shell变量扩展,但最终都失败了。

done < <( $@ )

确保引用"$@"。如果你不太清楚,那么它将进行glob扩展,*.bak可以扩展到当前目录中所有备份文件的名称。

done < <("$@")

然后,您还希望将命令作为单独的参数而不是单个字符串传递。这很简单:去掉周围的引号。

menu find . -name '*.bak'

最新更新