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

Linux 如何使用shell脚本中的剪切删除多个文件的扩展名?,linux,shell,cut,Linux,Shell,Cut,我正在学习如何使用“cut” #!/bin/bash for file in *.c; do name = `$file | cut -d'.' -f1` gcc $file -o $name done 以下代码有什么问题 这条线上有许多问题: name = `$file | cut -d'.' -f1` 首先,要分配shell变量,赋值运算符周围不应有空格: name=`$file | cut -d'.' -f1` 其次,您希望将$file作为字符串传递给cut,但实际

我正在学习如何使用“cut”

#!/bin/bash

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

以下代码有什么问题

这条线上有许多问题:

name = `$file | cut -d'.' -f1`
首先,要分配shell变量,赋值运算符周围不应有空格:

name=`$file | cut -d'.' -f1`
其次,您希望将
$file
作为字符串传递给
cut
,但实际上您正在尝试运行
$file
,就好像它是一个可执行程序一样(很可能是这样,但这与问题无关)。相反,请使用
echo
或shell重定向来传递它:

name=`echo $file | cut -d. -f1`
或:

或者您可以使用
basename
实用程序:

name=`basename $file .c`

您应该使用命令替换()来执行脚本中的命令

使用此选项,代码将如下所示

#!/bin/bash

for file in *.c; do
    name=$(echo "$file" | cut -f 1 -d '.')
    gcc $file -o $name
done
  • 使用echo将$file发送到标准输出
  • 然后,管道将在命令后触发
  • “剪切”命令与。分隔符将分割文件名并保留第一部分
  • 这将分配给name变量

  • 希望这个答案对'ls*.c'中的文件有帮助。

    将$file
    回送到
    剪切中。
    可能的重复也请参见,(U&L.SE),(SO),(AskU)等。太好了!!我甚至不知道赋值运算符周围不应该有空格。。。
    name=`basename $file .c`
    
    #!/bin/bash
    
    for file in *.c; do
        name=$(echo "$file" | cut -f 1 -d '.')
        gcc $file -o $name
    done