首页 > 系统相关 >shell脚本和makefile的异同

shell脚本和makefile的异同

时间:2024-02-04 19:26:02浏览次数:30  
标签:脚本 shell 异同 makefile Makefile echo VAR PATH

一直有这个疑惑,今天特地查了查,粘在这里。这是别人,要是以后自己发现了别的不同,在继续写。还有,最后两条还不是很明白,可能没用过吧,

在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的。本文试着归纳一下Makefile和shell脚本的不同。
1、 shell中所有引用以$打头的变量其后要加{},而在Makefile中的变量是以$打头的后加()。实例如下:
Makefile
PATH="/data/"
SUBPATH=$(PATH)

Shell
PATH="/data/"
SUBPATH=${PATH}

2、Makefile中所有以$打头的单词都会被解释成Makefile中的变量。如果你需要调用shell中的变量(或者正则表达式中锚定句位$),都需要加两个$符号($$)。实例如下:

PATH="/data/"

all:
echo ${PATH}
echo $$PATH例子中的第一个${PATH}引用的是Makefile中的变量,而不是shell中的PATH环境变量,后者引用的事Shell中的PATH环境变量。

3、通配符区别
shell 中通配符*表示所有的字符
Makefile 中通配符%表示所有的字符

4、在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的。比如如下代码就是没有任何输出:

VAR="Hello"
echo "$VAR"

all:
.....以上代码任何时候都不会输出,没有在target内,如果上述代码改为如下:

VAR="Hello"

all:
echo "$VAR"
.....以上代码,在make all的时候将会执行echo命令。

5、在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是“; \”,以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行,例如:

SUBDIR=src example
all:
@for subdir in $(SUBDIR);
do
echo "building ";
done上述可以看出for循环中每行都是以”; \”结尾的。

6、获取当前目录

PATH=pwd 注意是``,不是''

标签:脚本,shell,异同,makefile,Makefile,echo,VAR,PATH
From: https://www.cnblogs.com/guanghui-hua/p/18006849

相关文章

  • 在PowerShell中管理Windows映像主要涉及到DISM模块的Cmdlets。这些Cmdlets提供了一系
    在PowerShell中管理Windows映像主要涉及到DISM模块的Cmdlets。这些Cmdlets提供了一系列功能,包括挂载(加载)、卸载(卸下)映像,添加或删除驱动程序,应用更新等。以下是一些常用的Cmdlets和它们的参数,以及相应的实例。常用CmdletsMount-WindowsImage-ImagePath:指定WIM文件的路径。-I......
  • PowerShell是一种跨平台的任务自动化解决方案,包括命令行shell、脚本语言和配置管理框
    PowerShell是一种跨平台的任务自动化解决方案,包括命令行shell、脚本语言和配置管理框架。PowerShell运行在Windows、Linux和macOS上。创建一个思维导图来概述PowerShell命令可能包括以下几个主要部分:基础命令操作Get-Help:获取命令帮助Get-Command:查找命令Get-Member:查看对......
  • helloShell
    初识SHELL变量常规的变量赋值不必多说,shell脚本还可以从命令输出中提取信息,赋值给变量反引号字符testing=`date`$()格式testing=$(date)#!/bin/bashtoday=$(date+%y%m%d)ls/usr/bin-al>log.$today#目录将输出到log.240204中数学运算使用方括号比expr更......
  • PowerShell编写Windows服务器的DDNS-ipv6客户端
    复制下面这个代码保存成“ddnsv6.fm20.cn.ps1”然后运行functionGet-GUID(){#指定注册表路径$path="HKLM:\Software\Firadio"#如果注册表路径不存在则创建if(-not(Test-Path$path)){New-Item-Force-Path$path>$null}#尝试......
  • Linux服务器升级GLIBC失败导致shell不可用的问题解决经历
    转自https://blog.csdn.net/u010549608/article/details/126281354?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170696599716800182728626%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170696599716800182728626&biz_i......
  • Shell条件判断:使用[]还是[[]]
    https://mp.weixin.qq.com/s/Gzv2o90dwUlBIDFcnSWpIA在编写Bash脚本时,逻辑表达式通常放在方括号[]中,但实际上,还有另一种方括号[[]]可供选择。这两种方括号在用法和功能上存在一些差异。本文将重点介绍[[]]的优势,并揭示如何判断当前环境是否支持Bash。一、[]与[[]]的区别标准......
  • Shell 避免无限递归
    在编写Shell脚本时,有时会产生我们不期望的递归。比如说,我曾经写过一个脚本,名为foo.sh。foo.sh的内容如下:functionfoo{#TODO}foo然后我在.zshrc里设置了别名:aliasfoo="source~/foo.sh"现在,当我在终端运行foo时,就会得到如下错误:/Users/undefined443/foo......
  • Shell 脚本实现上下键选择文本
    #!/bin/bash#函数:显示选择列表并返回用户选择的选项#参数:# $1-选项数组#返回值:# 用户选择的选项#定义选择函数select_option(){ choices=("$@") #将选项数组声明为全局变量 selected=0   #初始化选择索引 whiletrue;do  clear......
  • Linux基础47 Ansible之ad-hoc, 命令模块(command, shell, script), 软件管理模块(yum,
    Ansible之ad-hoc一、什么是ad-hoc1.什么是ad-hocad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存2.ad-hoc使用场景可以用作查看远程机器的进程,或者磁盘,或者拷贝文件3.ad-hoc命令使用[root@m01~]#ansibleweb01-mshell-a'free-m'web01|CHANGED|rc=......
  • Shell中set -e和if语句的组合使用
    shell脚本开头加上set-e命令后,在运行过程中如果出现返回值为非零,整个脚本就可以立刻退出。假如脚本中有if判断,很可能if条件的返回值是不为0的。一开始我是把hadoopfs-test-d$hdfs_folder单独写一行的,由于folder不存在,所以脚本直接退出。所以遇到这种情况,需要把有可能是结......