Bash 基本名称语法

  • 本文关键字:语法 Bash bash
  • 更新时间 :
  • 英文 :


我正在尝试编写一个脚本,该脚本采用参数的基本名称,然后检查该参数中是否有扩展名。如果有,它将打印扩展名。

这是我的代码:

file=basename $1
ext=${file%*}
echo ${file#"$stub"}
echo $basename $1

我正在呼应最后的 1 $basename 美元来检查 basename 的输出是什么。

一些测试显示:

testfile.sh one.two
./testfile: line 2: one.two: command not found
one.two
testfile.sh ../tester
./testfile: line 2: ../tester: No such file or directory
../tester

所以$basename 1美元都不起作用。我知道这是一个语法错误,所以有人可以解释我做错了什么吗?

编辑:

现在已经解决了我的问题:

file=$(basename "$1" )
stub=${file%.*}
echo ${file#"$stub"}

这将我的论点简化为基本名称,谢谢大家。

首先,你的语法是错误的:

file=$( basename "$1" )

其次,这是获取文件名(最后一个)扩展名的正确表达式:

ext=${file##*.}

如果要将命令的输出分配给变量,则必须执行它,可以使用反引号或使用特殊的括号引号:

file=`basename "$1"`
file=$(basename "$1")

要删除文件名的扩展名,您应该这样做

ext=${file#*.}

这将获得 $file 的值,然后删除该时间段之前的所有内容(这就是为什么有必要)。如果您的文件名包含句点,那么您应该使用 ext=${file##*.} ,其中##告诉 bash 删除匹配的最长字符串而不是最短字符串,因此它将删除最后一个句点,而不是第一个句点。

你的echo $basename $1很奇怪。它告诉bash打印一个名为$basename的变量的值和变量$1的值,这是脚本(或函数)的第一个参数。

如果要打印尝试执行的命令,请执行以下操作:

echo basename $1

如果您尝试打印命令的输出,则可以执行以下操作之一:

echo $(basename "$1")
echo "$file"
basename "$1"

希望这有帮助=)

相关内容

  • 没有找到相关文章

最新更新