在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)
答案 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字符和其他边角情况的文件名。