在bash

时间:2015-11-18 17:13:44

标签: bash variables

对不起,这似乎是一个非常直截了当的问题,但我无法在任何地方找到好的语法......

我在一个包含一些文件的目录中:a.fab.fa

这是我的剧本:

files=*
for f in $files
do

newname=$(echo $f|awk -F"/" '{print $NF;}'|cut -d'.' -f1);
less $f > less_$newname.txt
filename_$newname="less_$newname.txt"

done

出现以下错误:

filename_a=less_a.txt: command not found
filename_b=less_b.txt: command not found

我最终想要的是我目录中的4个文件:

a.fa
b.fa
less_a.txt
less_b.txt

两个名为filename_afilename_b

的新变量

关于我怎么做的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

非常确定你想要一些不同的东西(希望更简单)来实现目标。

declare -A filename
for f in *
do
        if [ -f "$f" ]
        then
                b="${f%.*}"
                o="less_${b}.txt"
                filename["$b"]="$o"
                cp "$f" "$o"
        fi
done

声明 -A 创建一个关联数组 - 这是一个比使用连接后缀更好的解决方案。 -f的测试确保我们只处理常规文件(而不是目录)。 $ {f%。*}剥离了扩展程序。 cp 将文件复制到新名称。

现在可以轻松迭代收集的文件名:

for k in "${!filename[@]}"
do
        echo "${filename[$k]}"
done