我正在测试一个简短的 bash 脚本。我想将字符串作为命令执行。
#!/bin/bash
echo "AVR-GCC"
$elf=" main.elf"
$c=" $main.c"
$gcc="avr-gcc -mmcu=atmega128 -Wall -Os -o $elf$c"
eval $gcc
echo "AVR-GCC done"
我知道它很丑陋,但它不应该执行 avr-gcc 命令吗?
错误如下:
./AVR.sh: line 4: = main.elf: command not found
./AVR.sh: line 5: = .c: command not found
./AVR.sh: line 6: =avr-gcc -mmcu=atmega128 -Wall -Os -o : command not found
我不知道你的最终目标是什么,但你可能会考虑使用以下更强大的方法:在 bash 中使用数组。 (我不会讨论脚本中的几个语法错误。)
不要像以前那样将命令及其参数放入字符串中,然后eval
字符串(顺便说一句,在你的情况下, eval 是无用的)。我将您的脚本理解为(与您的版本相比,此版本不会给您提到的错误,特别是变量分配没有美元符号):
#!/bin/bash
echo "AVR-GCC"
elf="main.elf"
c="main.c"
gcc="avr-gcc -mmcu=atmega128 -Wall -Os -o $elf $c"
eval $gcc
echo "AVR-GCC done"
你很快就会遇到问题,例如,当你遇到带有空格或有趣符号的文件时(想想一个名为; rm -rf *
)。反而:
#!/bin/bash
echo "AVR-GCC"
elf="main.elf"
c="main.c"
gcc="avr-gcc"
options=( "-mmcu=atmega128" "-Wall" -"Os" )
command=( "$gcc" "${options[@]}" -o "$elf" "$c" )
# execute it:
"${command[@]}"
尝试了解这里发生的情况(我可以澄清您要求我澄清的任何具体要点),并意识到它比将命令放入字符串中安全得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)