以下代码有什么问题?

name='$filename | cut -f1 -d'.''

照原样,我得到文字字符串 $filename | cut -f1 -d'.' ,但如果我删除引号,我什么也得不到。同时,键入
"test.exe" | cut -f1 -d'.'

在 shell 中给了我我想要的输出 test 。我已经知道 $filename 已分配正确的值。我想要做的是将没有扩展名的文件名分配给变量。

最佳答案

当您想在脚本/命令中执行命令时,您应该使用 command substitution 语法 $(command)

所以你的线路将是

name=$(echo "$filename" | cut -f 1 -d '.')

代码说明:
  • echo 获取变量 $filename 的值并将其发送到标准输出
  • 然后我们获取输出并将其通过管道传输到 cut 命令
  • cut 将使用 .作为分隔符(也称为分隔符),用于将字符串切割成段,并通过 -f 我们选择我们想要在输出
  • 中的段
  • 然后 $() 命令替换将获得输出并返回其值
  • 返回值将赋值给名为 name 的变量

  • 请注意,这给出了直到第一个周期 . 的变量部分:
    $ filename=hello.world
    $ echo "$filename" | cut -f 1 -d '.'
    hello
    $ filename=hello.hello.hello
    $ echo "$filename" | cut -f 1 -d '.'
    hello
    $ filename=hello
    $ echo "$filename" | cut -f 1 -d '.'
    hello
    

    关于bash - 如何在 shell 脚本中删除文件名的扩展名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12152626/

    10-13 08:39