将目录文件列入没有文件扩展名的数组

时间:2017-02-09 05:50:18

标签: linux bash shell

我有以下文件:

abc.json
xyz.json
pdf.json

我想在没有" json"的情况下得到这样的结果。扩展:

somearray=(abc, xyz, pdf)

2 个答案:

答案 0 :(得分:3)

您可以使用globbing将文件放入数组中,然后使用参数扩展删除扩展名:

$ arr=(*.json)
$ declare -p arr
declare -a arr='([0]="abc.json" [1]="pdf.json" [2]="xyz.json")'
$ arr=("${arr[@]%.json}")
$ declare -p arr
declare -a arr='([0]="abc" [1]="pdf" [2]="xyz")'

答案 1 :(得分:2)

你可以这样做:

some_array=( $(ls | sed 's/.json$//') )

或者,如果您只查找.json个文件,那么:

some_array=( $(ls | grep '.json$' | sed 's/.json$//') )

如果您的文件中包含空格或通配符(*),则上述方法不安全。

如果您使用Bash,则可以使用参数扩展来取消扩展。这种方法比以前的方法更强大 - 它可以优雅地处理带有空格或通配符的文件:

declare -a some_array
for file in *.json; do
  some_array+=( "${file%.json}" )
done

请参阅以下帖子: