어셈블리 파일을 컴파일하기 위해 여러 명령을 실행해야 했기 때문에 이에 대한 스크립트를 작성하기로 결정했습니다. 컴파일해야 하는 명령은 다음과 같습니다 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}
중괄호 안에 두 번째가 없다는 것입니다.$