ls 带通配符

lon*_*nix 7 ls quoting wildcards variable

这从终端工作:

ls /dev/sda*
Run Code Online (Sandbox Code Playgroud)

我想在 bash 脚本中使用变量。我试过:

device="a"
ls "/dev/sd"$device"*"
Run Code Online (Sandbox Code Playgroud)

但我收到错误:ls: cannot access '/dev/sda*': No such file or directory

Hau*_*ing 11

ls /dev/sd$device* # or
ls "/dev/sd$device"*
Run Code Online (Sandbox Code Playgroud)

如果要执行通配符,则不得引用通配符元字符。

  • 原文中的引用几乎完全是倒退的。你*不能*引用你想要扩展的通配符;你*应该*引用变量引用以防止意外的分词和通配符扩展;引用不包含任何 shell 元字符的固定字符串并不重要。原始文件引用了通配符,未引用变量引用,两者都应该颠倒(如本答案中的第二个选项)。顺便说一句,`ls /dev/sd"$device"*` 也可以,因为 `/dev/sd/` 不包含任何元字符。 (2认同)
  • 我的外壳也完成了通配符和引号,`ls` 对它们一无所知。 (2认同)

Ste*_*itt 8

双引号告诉 shell 保持*原样而不是扩展它。这将起作用:

device="a"
ls "/dev/sd${device}"*
Run Code Online (Sandbox Code Playgroud)