找不到BASH脚本返回命令

时间:2015-06-03 17:42:42

标签: bash

我是bash编程的新手,想要创建一个脚本,将每个find的结果单独存储到一个数组中。现在我希望command变量扩展到语句MYRA=($(${Command} $1))

Command = 'find . -iname "*.cpp" -o -iname "*.h"'
declare -a MYRA
    MYRA=($(${Command} $1))
echo ${#MYRA[@]} 

然而,当我尝试这个脚本时,我得到了结果

$ sh script.sh
script.sh: line 1: Command: command not found
0

有关如何解决此问题的任何建议?

2 个答案:

答案 0 :(得分:3)

Shell赋值语句在=周围可能没有空格。这是有效的:

Command='some command'

这不是:

Command = 'some command'

在第二种形式中,bash会将Command解释为命令名。

答案 1 :(得分:1)

以下所有内容都需要#!/bin/bash shebang(因为您使用的是阵列,这只是一个仅限bash的功能,因此不会让您感到惊讶。)

另外,请参阅http://mywiki.wooledge.org/BashFAQ/050进行全面讨论。

最佳实践实现看起来像这样:

# commands should be encapsulated in functions where possible
find_sources() { find . '(' -iname '*.cpp' -o -iname '*.h' ')' -print0; }

declare -a source_files
while IFS= read -r -d '' filename; do
  source_files+=( "filename" )
done < <(find_sources)

现在,如果你真的需要将命令存储在一个数组中(也许你正在动态构建它),那么这样做 this

# store literal argv for find command in array
# ...if you wanted to build this up dynamically, you could do so.
find_command=( find . '(' -iname '*.cpp' -o -iname '*.h' ')' -print0 )

declare -a source_files
while IFS= read -r -d '' filename; do
  source_files+=( "filename" )
done < <("${find_command[@]}")