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

时间:2014-10-13 19:40:16

标签: 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

file_list =($(查找' / var / www' -type f -name" * .jstd"))在终端,但在脚本中失败:

Syntax error: "(" unexpected

我用谷歌搜索,但失败了。感谢所有的想法。

编辑:如果它有助于复制或线索,我运行Ubuntu 12.04,使用GNU bash,版本4.2.25(1)-release(i686-pc-linux-gnu)

1 个答案:

答案 0 :(得分:3)

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

$ dash -c 'foo=( bar )'
dash: 1: Syntax error: "(" unexpected

如果您使用sh yourscript运行脚本 - 请不要。您必须使用bash调用bash脚本。


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

file_list=( )
while IFS= read -r -d '' filename; do
  file_list+=( "$filename" )
done < <(find '/var/www' -type f -name "*.jstd" -print0)

...上述方法正确处理包含空格,换行符,glob字符和其他边角情况的文件名。