找不到返回命令的BASH脚本

找不到返回命令的BASH脚本,bash,Bash,我对bash编程非常陌生,希望创建一个脚本,将find的每个结果分别存储到一个数组中。现在我希望command变量在语句MYRA=($(${command}$1)) 然而,当我尝试这个脚本时,我得到了结果 $ sh script.sh script.sh: line 1: Command: command not found 0 关于如何解决此问题的任何建议?Shell赋值语句的=周围可能没有空格。这是有效的: Command='some command' 这不是: Command = 's

我对bash编程非常陌生,希望创建一个脚本,将find的每个结果分别存储到一个数组中。现在我希望
command
变量在语句
MYRA=($(${command}$1))

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

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

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

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

Command='some command'
这不是:

Command = 'some command'

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

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

Command='some command'
这不是:

Command = 'some command'

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

以下所有内容都需要
#/bin/bash
shebang(这并不奇怪,因为您使用的是数组,这是bash特有的特性)

此外,请参阅以了解全面的讨论


最佳实践实施如下所示:

# 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)
#命令应尽可能封装在函数中
find_sources(){find.'('-iname'*.cpp'-o-iname'*.h')'-print0;}
声明-a源文件
而IFS=read-r-d“”文件名;做
源文件+=(“文件名”)

完成<以下所有操作都需要一个
#/bin/bash
shebang(这并不奇怪,因为您使用的是数组,这是bash特有的特性)

此外,请参阅以了解全面的讨论


最佳实践实施如下所示:

# 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)
#命令应尽可能封装在函数中
find_sources(){find.'('-iname'*.cpp'-o-iname'*.h')'-print0;}
声明-a源文件
而IFS=read-r-d“”文件名;做
源文件+=(“文件名”)

done<首先,您可能希望包含希望作为/在下面运行的“shell”,例如#/bin/bash。我不知道我是否会使用“Command”作为标识符,但我确实怀疑您是否使用了单引号“而不是单引号”,正如开放引号中所说的“将此作为命令运行”,而单引号将使您获得希望作为“字符串”运行的命令,以放入数组中。请参阅以讨论在变量中安全存储shell命令。另外,
array=($(find…)
如果文件名包含空格、全局字符或其他有趣的内容,则会失败。顺便说一句,请随时提出后续问题;我在回答中使用的一些其他技巧(例如从NUL分隔的流读取——因为NUL是UNIX路径名中唯一不存在的字符)在FAQ 50之外的其他地方有文档记录;例如,BashFAQ#1()中涉及到了这个特定的脚本。首先,您可能希望包含希望作为/在其下运行的“shell”,例如#/bin/bash。我不知道我是否会使用“Command”作为标识符,但我确实怀疑您是否使用了单引号“而不是单引号”,正如开放引号中所说的“将此作为命令运行”,而单引号将使您获得希望作为“字符串”运行的命令,以放入数组中。请参阅以讨论在变量中安全存储shell命令。另外,
array=($(find…)
如果文件名包含空格、全局字符或其他有趣的内容,则会失败。顺便说一句,请随时提出后续问题;我在回答中使用的一些其他技巧(例如从NUL分隔的流读取——因为NUL是UNIX路径名中唯一不存在的字符)在FAQ 50之外的其他地方有文档记录;例如,在BashFAQ#1()中提到了这一点。感谢您清除了这一点,但是现在我得到了数组大小为零,但是如果我用实际的命令替换
${Command}
,它就会工作。感谢您清除了这一点,但是现在我得到了数组大小为零,但是如果我替换
${Command}
使用实际的命令,它就会工作