Shell 在makefile中使用$RANDOM

Shell 在makefile中使用$RANDOM,shell,makefile,terminal,Shell,Makefile,Terminal,我正在制作一个makefile来重命名包含随机数的文件(我是shell脚本的新手)。我不明白为什么,但当我运行文件时,$rand被赋予值“ANDOM”。当我在makefile之外运行它时,它可以工作 我在Mac os终端上运行这个,以防有用 all: renamefiles renamefiles: rand=$RANDOM && mv myfile.css $rand-myfile.css && mv myotherfile.css $rand-myo

我正在制作一个makefile来重命名包含随机数的文件(我是shell脚本的新手)。我不明白为什么,但当我运行文件时,$rand被赋予值“ANDOM”。当我在makefile之外运行它时,它可以工作

我在Mac os终端上运行这个,以防有用

all: renamefiles

renamefiles:
    rand=$RANDOM && mv myfile.css $rand-myfile.css && mv myotherfile.css $rand-myotherfile.css

例如,可能需要将多字母宏名称用大括号(或括号)括起来

${RANDOM}
$(RANDOM)

  • 使用日期/时间戳以使重命名的文件按日期顺序列出不是更容易/更好吗

  • 对于希望shell看到的每个
    $
    ,需要在
    makefile
    中使用两个
    $
    符号

  • 因此:

    或者,带有日期/时间戳:

    all: renamefiles
    
    renamefiles:
        time=$$(date +'%Y%m%d-%H%M%S') && \
        mv myfile.css      $$time-myfile.css && \
        mv myotherfile.css $$time-myotherfile.css
    

    要在一个或多个make变量中使用随机数,以下操作对我来说很好:

    FOO="some string with \"$$rand\" in it"
    BAR=" you may use it $$rand times."
    foobar:
        rand=$$$$ && \
        echo $(FOO) $(BAR)
    

    这将评估
    make
    变量RANDOM(它可能不存在,也不是随机的)。在本例中,我认为诀窍在于编写
    $
    将一个
    $
    放入shell:
    rand=$$RANDOM
    rand=$${RANDOM}
    $RANDOM是我第一次想到的,但时间肯定更好。感谢您请注意,
    $RANDOM
    是一个内置的bash变量,而不是在所有shell中(与
    $$
    不同,它应该在所有兼容POSIX的shell中都可用,请参阅)。使用默认的shell。要指定使用哪个shell make,请定义一个变量:
    shell=/bin/bash
    或(通过cmd行参数)
    make shell=/bin/bash
    请参阅:非常感谢@mems对已接受答案的评论。尽管这个答案并没有解决所陈述的用例,但它符合我希望的问题:)
    FOO="some string with \"$$rand\" in it"
    BAR=" you may use it $$rand times."
    foobar:
        rand=$$$$ && \
        echo $(FOO) $(BAR)