【发布时间】:2017-06-27 00:28:02
【问题描述】:
我有类似的文件:
abc.json
xyz.json
pdf.json
我想在没有“json”扩展的情况下得到这样的结果:
somearray=(abc, xyz, pdf)
【问题讨论】:
-
数组中的逗号实际上没有意义。你拥有它的想法是什么?你有没有尝试解决这个问题?
我有类似的文件:
abc.json
xyz.json
pdf.json
我想在没有“json”扩展的情况下得到这样的结果:
somearray=(abc, xyz, pdf)
【问题讨论】:
你可以这样做:
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
查看这些帖子:
【讨论】:
ls 的输出要好得多,而背靠背使用grep/sed 会使情况变得更糟。在前两种情况下,词分裂的可能性很大。最好不要推荐前两种方法。
您可以通过 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")'
【讨论】: