質問者は3年後に移動したと確信していますが、他の誰かがここに興味を持っている場合は、makeを使用してタスクを実行するモジュール式の方法です.
hasA = $(findstring A,$(1))
lastN = $(shell echo -n $(1) | tail -c $(2))
firstN = $(shell echo -n $(1) | head -c $(2))
smack0 = $(1)0$(2)
AFormat = $(call smack0,$(call firstN,$(1),4),$(call lastN,$(1),5))
myFormat = $(if $(call hasA,$(1)),$(call AFormat,$(1)),$(1))
func9 = $(call myFormat,$(call lastN,$(1),9))
# AFormat = smack0 (firstN (string,4),lastN (string,5))
# myFormat = hasA (string) ? AFormat (string) : string
# func9 = myFormat (last9 (string))
test:
@echo hasA "(1234B66547) ->" $(call hasA,1234B66547)
@echo lastN "(RosieODonnellSuperManVelociraptor123456789,9) ->" $(call lastN ,RosieODonnellSuperManVelociraptor123456789,9)
@echo smack0 "(1234,0,ABCD) ->" $(call smack0,1234,ABCD)
@echo func9 "(S12a1234A5678 ) ->" $(call func9,S12a1234A5678)
@echo func9 "(S123a1234A5678) ->" $(call func9,S123a1234A5678)
@echo func9 "(S123123456789 ) ->" $(call func9,S123123456789)
確かに、これは、「func9」のタスクを自動化するスクリプトを 1 つ作成し、それを w/ で呼び出すというバリエーションと見なす$(shell func9 $(STR))
ことができますが、make レシピにのみ関連する小さなスクリプトをわざわざ保存したくないかもしれません。 & ヘルパー makefile に保存した方がよいでしょう。