Linux 如何使用shell脚本中的剪切删除多个文件的扩展名?
我正在学习如何使用“cut”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,但实际
#!/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
希望这个答案对'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