2016-08-18 31 views
0

我不熟悉perl和bash,但我必須使用包含bash命令的perl腳本來完成任務。這裏是命令:如何減少perl腳本中的多個參數

basename -t input.nii.gz -o output \ 
      -g atlas1.nii.gz -l labels1.nii.gz \ 
      -g atlas2.nii.gz -l labels2.nii.gz \ 
      -g atlas3.nii.gz -l labels3.nii.gz \ 
      -g atlas4.nii.gz -l labels4.nii.gz \ 
      -g atlas3.nii.gz -l labels3.nii.gz \ 
      -g ............ \ 
      -l ............ 

我有18個地圖集和標籤的文件,並且該命令不能只執行嚴格的順序。是否可以減少參數到以下方式:

basename -t input.nii.gz -o output -g atlas%.nii.gz -l labels%.nii.gz 

謝謝。

+2

我真的很困惑......我理解你的問題,但'basename'只是從文件中刪除路徑?我認爲它甚至沒有像-t和-o這樣的參數。我可能完全處於左側場地。 – Hambone

+2

這不是Perl,而且bash確實有變量。它看起來更像'atlas $ i.nii.gz' – ikegami

+3

請更具體。 basename是bash中的命令,它沒有-t,-o -g或-l選項。 http://linux.die.net/man/1/basename –

回答

1

您可以使用循環來構建一個參數數組,以便與basename一起使用。

for i in {1..18}; do 
    args+=(-g atlas$i.nil.gz -l labels$i.nii.gz) 
done 
basename -t input.nii.gz -o output "${args[@]}" 
相關問題