Pergunta de expansão de parâmetro

2

Eu tenho 2 arquivos cada em subdiretórios user / admin / 1/2 / [a-c].

Os arquivos são preQC_1.txt e preQC_2.txt - ambos serão entradas na minha ferramenta.

Eu uso "$ {f ## * /}" para preQC_1.txt no meu loop

for f in ~/1/2/*/*_1.txt; do exptool input1= "${f##*/}" input2= "{$f%_1.txt}_2.txt"

Meu programa diz que o arquivo '{$ f% _1.txt} _2.txt' e estou 100% certo de que estou incorretamente usando a expansão de parâmetro. Para input2, como posso ter certeza de que estou recebendo apenas o 'preQC_2.txt' (nome do arquivo + extensão sem a listagem do diretório)?

EDIT: Eu tentei combinar "$ {f ## * /}" e {$ f% _1.txt} _2.txt "mas isso realmente se expande para 'user / admin / 1/2 / a / preQC_1. txt_2.txt '

    
por ozarka 04.02.2016 / 20:36

2 respostas

2
for f in ~/1/2/*/*_1.txt; do
    file_without_path="${f##*/}"
    exptool input1= "${file_without_path}" input2= "${file_without_pathf%_1.txt}_2.txt"
done
    
por 04.02.2016 / 20:44
1

Você acabou de cometer um erro de sintaxe: escreveu "{$f%_1.txt}_2.txt" enquanto o formulário correto é "${f%_1.txt}_2.txt" (você perdeu o caractere $ ).
 :)
Edit: woops, eu entendi errado, porque no bloco "${f%_1.txt}_2.txt" , o valor de f ainda é user/admin/1/2/a/preQC_1.txt então basicamente o valor de "${f%_1.txt}_2.txt" é user/admin/1/2/a/preQC_2.txt , o que não é o que você deseja. > Eu recomendaria a atualização do valor de f , como

for f in ~/1/2/*/*_1.txt
f=${f##*/}
do exptool input1= "$f" input2= "${f%_1.txt}_2.txt"
done

que praticamente se junta à resposta de Hauke Laging.

    
por 04.02.2016 / 20:49