我有一个这样的变量:
export ITEM={countryname}
Run Code Online (Sandbox Code Playgroud)
这可以是:
"Albania",
"United States" // with space
"Fs. Artic Land" // dot
"Korea (Rep. Of)" // braket
"Cote d'Ivoir" // '
Run Code Online (Sandbox Code Playgroud)
这个变量$(ITEM)被传递给其他命令,有些需要的是它(很好,我将使用$(ITEM)),有些必须有字符替换,例如,与mkdir -p ../folder/{countryname}:
"Albania" // => Albania
"United States" // => United_States
"Fs. Artic Land" // => Fs\._Artic_Land
"Korea (Rep. Of)" // => Korea_\(Rep\._Of\)
"Cote d'Ivoire" // => Cote_d\'Ivoire
Run Code Online (Sandbox Code Playgroud)
所以我需要一个新的 make 变量,例如
export ITEM={countryname}
export escaped_ITEM=$(ITEM).processed_to_be_fine
Run Code Online (Sandbox Code Playgroud)
我应该如何在我的 makefile 中进行此字符替换?(为了让事情简单,不必执行外部脚本)。我正在考虑使用一些嵌入tr或其他东西。
注意:在 Ubuntu 上工作。
您可以使用substGNU Make 中的函数来执行替换。
escaped_ITEM := $(subst $e ,_,$(ITEM))\nRun Code Online (Sandbox Code Playgroud)\n\n(其中$e是未定义或空变量;感谢@EtanReisner 指出)。
不过,每次单独替换都需要一个subst。
不过,如果可能的话,我建议不要这样做——使用单个机器可读的标记作为文件名,并将它们映射到人类可读的位置,仅作为最后一步。这在你的 makefile 中也更容易:
\n\nhuman_readable_us=United States\nhuman_readable_kr=Korea (Rep. of)\nhuman_readable_ci=C\xc3\xb4te d\'Ivoire\nhuman_readable_tf=FS. Antarctic Lands\n\nstuff:\n echo "$(human_readable_$(ITEM))"\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
7369 次 |
| 最近记录: |