语法错误:";(“意外”在bash中分配数组

语法错误:";(“意外”在bash中分配数组,bash,Bash,在bash脚本中,我试图将扩展名为“.jstd”的所有文件拉入一个数组,循环该数组并执行一些操作 我的脚本无法将每个脚本的路径复制到数组中 我有以下脚本 #!/bin/bash IFS=$'\n' file_list=($(find '/var/www' -type f -name "*.jstd")) for i in "${file_list[@]}"; do echo "$i" done echo $file_list unset IFS 行文件列表=($(find'/var

在bash脚本中,我试图将扩展名为“.jstd”的所有文件拉入一个数组,循环该数组并执行一些操作

我的脚本无法将每个脚本的路径复制到数组中

我有以下脚本

#!/bin/bash

IFS=$'\n'
file_list=($(find '/var/www' -type f -name "*.jstd"))
for i in "${file_list[@]}"; do
    echo "$i"
done

echo $file_list
unset IFS
文件列表=($(find'/var/www'-type f-name“*.jstd”)在终端中工作正常,但在脚本中失败,原因是:

Syntax error: "(" unexpected
我在谷歌上搜索过,但失败了。所有的想法都得到了感激的回应


编辑:如果有助于复制或提供线索,我正在运行Ubuntu12.04,带有GNUBASH,版本4.2.25(1)-发行版(i686 pc linux GNU)

这正是如果你的shell是Ubuntu上的
/bin/sh
,而不是bash,你会得到的错误:

$ dash -c 'foo=( bar )'
dash: 1: Syntax error: "(" unexpected
如果您正在使用
sh运行脚本,请不要这样做。您必须使用bash调用bash脚本


尽管如此,从
find
读取文件列表的更好方法是:

file_list=( )
while IFS= read -r -d '' filename; do
  file_list+=( "$filename" )
done < <(find '/var/www' -type f -name "*.jstd" -print0)
文件列表=()
当IFS=read-r-d“”文件名时,执行以下操作
文件列表+=(“$filename”)

完成<如果你的shell是Ubuntu上的
/bin/sh
,而不是bash上的,那么这正是你会遇到的错误:

$ dash -c 'foo=( bar )'
dash: 1: Syntax error: "(" unexpected
如果您正在使用
sh运行脚本,请不要这样做。您必须使用bash调用bash脚本


尽管如此,从
find
读取文件列表的更好方法是:

file_list=( )
while IFS= read -r -d '' filename; do
  file_list+=( "$filename" )
done < <(find '/var/www' -type f -name "*.jstd" -print0)
文件列表=()
当IFS=read-r-d“”文件名时,执行以下操作
文件列表+=(“$filename”)

完成<如果你的shell是Ubuntu上的
/bin/sh
,而不是bash上的,那么这正是你会遇到的错误:

$ dash -c 'foo=( bar )'
dash: 1: Syntax error: "(" unexpected
如果您正在使用
sh运行脚本,请不要这样做。您必须使用bash调用bash脚本


尽管如此,从
find
读取文件列表的更好方法是:

file_list=( )
while IFS= read -r -d '' filename; do
  file_list+=( "$filename" )
done < <(find '/var/www' -type f -name "*.jstd" -print0)
文件列表=()
当IFS=read-r-d“”文件名时,执行以下操作
文件列表+=(“$filename”)

完成<如果你的shell是Ubuntu上的
/bin/sh
,而不是bash上的,那么这正是你会遇到的错误:

$ dash -c 'foo=( bar )'
dash: 1: Syntax error: "(" unexpected
如果您正在使用
sh运行脚本,请不要这样做。您必须使用bash调用bash脚本


尽管如此,从
find
读取文件列表的更好方法是:

file_list=( )
while IFS= read -r -d '' filename; do
  file_list+=( "$filename" )
done < <(find '/var/www' -type f -name "*.jstd" -print0)
文件列表=()
当IFS=read-r-d“”文件名时,执行以下操作
文件列表+=(“$filename”)

完成<不执行此操作。请参阅原因。正确执行此操作。对于bash 4+,此处也可能有用。该错误表示您没有使用bash调用脚本。您是否正在运行
sh yourscript
?如果是,手动使用
sh
将覆盖
#!/bin/bash
shebang。(另外,请允许我强烈响应@EtanReisner给出的建议;以这种方式从
find
读入数组是一个非常有损的过程)…而且,
echo$file\u list
对数组没有意义。
printf'%q\n'${file\u list[@]}”
当然会有意义,但实际上,您的代码只打印第一个数组条目,并且在字符串拆分和全局展开后打印(因为您没有正确引用).是的,我正在运行sh!非常好的点和新手错误。干杯。如果你想回答这个问题,我可以接受。收获你知识的回报。不要这样做。查看原因。正确执行此操作。对于bash 4+,此错误也可能有用。此错误表示你没有使用bash调用脚本。你可能是runni吗ng
sh yourscript
?如果是这样,手动使用
sh
将覆盖
#!/bin/bash
shebang。(另外,请允许我强烈响应@EtanReisner给出的建议;以这种方式从
find
读取数组是一个非常有损的过程)…而且,
echo$file\u list
对数组没有意义。
printf'%q\n'${file\u list[@]}
当然有意义,但因为它是您的代码,所以只打印第一个数组条目,并且在字符串拆分和全局展开之后(因为您没有正确引用).是的,我正在运行sh!非常好的点和新手错误。干杯。如果你想回答这个问题,我可以接受。收获你知识的回报。不要这样做。查看原因。正确执行此操作。对于bash 4+,此错误也可能有用。此错误表示你没有使用bash调用脚本。你可能是runni吗ng
sh yourscript
?如果是这样,手动使用
sh
将覆盖
#!/bin/bash
shebang。(另外,请允许我强烈响应@EtanReisner给出的建议;以这种方式从
find
读取数组是一个非常有损的过程)…而且,
echo$file\u list
对数组没有意义。
printf'%q\n'${file\u list[@]}
当然有意义,但因为它是您的代码,所以只打印第一个数组条目,并且在字符串拆分和全局展开之后(因为您没有正确引用).是的,我正在运行sh!非常好的点和新手错误。干杯。如果你想回答这个问题,我可以接受。收获你知识的回报。不要这样做。查看原因。正确执行此操作。对于bash 4+,此错误也可能有用。此错误表示你没有使用bash调用脚本。你可能是runni吗ng
sh yourscript
?如果是这样,手动使用
sh
将覆盖
#!/bin/bash
shebang。(另外,请允许我强烈响应@EtanReisner给出的建议;以这种方式从
find
读取数组是一个非常有损的过程)…而且,
echo$file\u list
对数组没有意义。
printf'%q\n'${file\u list[@]}
当然有意义,但因为它是您的代码,所以只打印第一个数组条目,在字符串拆分和glob扩展之后(因为您没有正确引用)。是的,我正在运行sh!非常好的spot和n