使用变量进行Bash命令替换

时间:2012-10-03 23:57:06

标签: bash pipe command-substitution variable-subsitution

我有一个基于文件列表构建命令的bash脚本,因此命令是动态构建的。动态构建它意味着它存储在变量中。然后我想运行该命令并将输出存储在一个单独的变量中。当我使用命令替换尝试并运行命令时,它会崩溃。当变量使用管道时,如何使用命令替换来处理变量中的命令?

这是我的剧本:

# Finds number of files that are over 365 days old

ignored_files=( 'file1' 'file2' 'file3' )
path_to_examine="/tmp/"
newer_than=365

cmd="find $path_to_examine -mtime -$newer_than"
for file in "${ignored_files[@]}"; do
    cmd="$cmd | grep -v \"$file\""
done
cmd="$cmd | wc -l"
echo "Running: $cmd"
num_active_files=`$cmd`
echo "num files modified less than $newer_than days ago: $num_active_files"

如果我运行该程序,则输出:

# ./test2.sh 
Running: find /tmp/ -mtime -365 | grep -v "file1" | grep -v "file2" | grep -v "file3" | wc -l
find: bad option |
find: [-H | -L] path-list predicate-list
# 

如果我运行该cmd,则输出:

# num=`find /tmp/ -mtime -365 | grep -v "file1" | grep -v "file2" | grep -v "file3" | wc -l`
# echo $num
10
# 

1 个答案:

答案 0 :(得分:4)

您必须使用eval命令:

num_active_files=`eval $var`

这允许您为bash生成一个动态运行的表达式。

希望这有助于=)