Makefile转Shell脚本疑问:@PATH@含义及等效实现写法咨询
问题解答
疑问a解答
代码中的
@PATH@.log代表什么含义?是否是读取系统默认环境变量PATH?
@PATH@不是系统环境变量PATH的读取逻辑,这是Autotools(configure脚本)或其他代码生成工具的占位符语法,在Makefile被实际使用前,会被前置的配置步骤替换为对应实际路径值,原生Make执行阶段不会主动替换这个内容,更不会读取系统的$PATH变量。
疑问b解答
执行后WHAT1_WHERELOG_VAR的最终值是什么?是不是最终会执行
export ALOHA_WHERE_FILENAME = mac.@PATH@.log?
WHAT1_WHERELOG_VAR本身的固定值是ALOHA_WHERE_FILENAME,不会变化。- 你理解的最终执行逻辑是正确的:因为
WHAT1_NUM值为1,所以会先定义名为ALOHA_WHERE_FILENAME的变量值为mac.@PATH@.log,再执行export把这个变量导出为环境变量,等价于你描述的导出语句。
Shell脚本转换修正
你原来的转换存在两处错误:
- 错误把
@PATH@写成了@$PATH@,不要额外加$符号:如果当前还没到占位符替换步骤,直接保留@PATH@原文即可;如果已经完成占位符替换,直接替换为对应实际路径即可。 - Shell中
==是Bash专属语法,POSIX标准的test语句用=做等值判断,另外变量引用最好加双引号避免空格导致的语法错误。
修正后的等效Shell代码如下:
WHAT1_UC="ALOHA" WHAT1_NUM=1 WHAT1_WHERELOG_VAR="${WHAT1_UC}_WHERE_FILENAME" if [ "$WHAT1_NUM" = 1 ]; then export "${WHAT1_WHERELOG_VAR}=mac.@PATH@.log" else export "${WHAT1_WHERELOG_VAR}=${RLDIR}/mac.@PATH@.t%.log" fi
内容的提问来源于stack exchange,提问作者Vimo
相关产品推荐
相关产品推荐

