我必须执行几个命令来编译我的程序集文件,因此我决定为其编写一个脚本。我需要编译的命令hello.asm
:
nasm -fmacho64 hello.asm ; creates hello.o file which I need to compile with gcc
gcc -o exe hello.o -lSystem
所以我编写了一个脚本来执行此操作,还执行结果并删除所有内容:
nasm -fmacho64 $1
temp=${$1/.asm/.o}
gcc -o exe $temp -lSystem
./exe
rm exe
rm $temp
我正在 上执行此操作,但我检查了替换在和zsh
上的工作原理相同。它说以及后面的一些其他错误:bash
zsh
bad substitution
➜ ./asm_execute.sh hello.asm
./asm_execute.sh: line 2: ${$1/.asm/.o}: bad substitution
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
./asm_execute.sh: line 4: ./exe: No such file or directory
rm: exe: No such file or directory
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
答案1
$
你的表情中有太多迹象。
您可以说$1
或${1}
来访问第一个参数的值。如果要修改该值,则需要使用第二种形式。所以你想要的是-大括号内${1/.asm/.o}
没有第二个。$