我有以下文件:
abc.json
xyz.json
pdf.json
我想在没有" json"的情况下得到这样的结果。扩展:
somearray=(abc, xyz, pdf)
答案 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
请参阅以下帖子: