2015-11-18 106 views
0

對不起,這似乎是一個非常簡單的問題,但我無法找到任何地方好的語法我一直在尋找...呼叫可變

我與一些文件的目錄: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_a新的變量和filename_b

上我怎麼可能做任何想法?謝謝!

+4

http://xyproblem.info - 爲什麼地球上你想要的變量變量名?我們不願意提問槍手,以便他們可以在腳上自己射擊。所以,請解釋你爲什麼認爲你需要這個? –

+0

我有一個腳本,它具有許多由for循環生成的'種類'A和B的變量。因此,我最終想要變量Aa,Ab,Ac VS Ba,Bb,Bc,在我看來這很容易以這種方式命名:) – tlorin

+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