我正在研究如何使用' cut'。
#!/bin/bash
for file in *.c; do
name = `$file | cut -d'.' -f1`
gcc $file -o $name
done
以下代码有什么问题?
答案 0 :(得分:-1)
这一行存在许多问题:
name = `$file | cut -d'.' -f1`
首先,要分配一个shell变量,赋值运算符周围不应该有空格:
name=`$file | cut -d'.' -f1`
其次,您希望将$file
作为字符串传递给cut
,但您实际上正在尝试运行$file
,就好像它是一个可执行程序一样(它很可能是,但这不是重点。相反,使用echo
或shell重定向来传递它:
name=`echo $file | cut -d. -f1`
或者:
name=`cut -d. -f1 <<< $file`
我实际上建议您稍微改变一下。如果您收到foo.bar.c
这样的文件,您的解决方案就会中断。相反,您可以使用shell扩展来去除尾随扩展名:
name=${file%.c}
或者您可以使用basename
实用程序:
name=`basename $file .c`
答案 1 :(得分:-1)
您应该使用命令substitution(https://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution)在脚本中执行命令。
这样代码就像这样
#!/bin/bash
for file in *.c; do
name=$(echo "$file" | cut -f 1 -d '.')
gcc $file -o $name
done
希望这个答案有所帮助