如何使用shell脚本中的cut删除多个文件的扩展名?

时间:2018-05-15 19:34:31

标签: linux shell cut

我正在研究如何使用' cut'。

#!/bin/bash

for file in *.c; do
    name = `$file | cut -d'.' -f1`
    gcc $file -o $name
done

以下代码有什么问题?

2 个答案:

答案 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
  1. 使用echo将$ file发送到标准输出。
  2. 然后管道将在命令后触发。
  3. 用剪切命令。分隔符将拆分文件名并保留第一部分。
  4. 将其分配给名称变量。
  5. 希望这个答案有所帮助