如何将“ls”的结果存储在变量中,并将 cd 存储到该变量中

How to store the result of ‘ls’ in a variable, and cd into that variable

我想将 ls 的结果存储在一个变量中,然后我想 cd 到那个变量中。

我有如下脚本。

Cd /home/dev/command
work_dir=$(ls -ltrd log$(date +%y%m%d)\* | tail -n 1)
echo $work_dir
cd “/home/dev/command/$work_dir”

它显示错误,比如没有这样的文件或目录

如何CD进入ls命令显示的目录

cd “/home/dev/command/$work_dir”

您使用的是 unicode “ U+201C” U+201D 左右双引号,它们在英文文本中使用,而不是普通的 " U+0022 引号。所以 bash 认为引号是目录名的一部分。

除了中提到的unicode引号外,我还要补充几点:

  • 您似乎在 Cd /home/dev/command 中将 cd 命令大写了。也许您正在使用 Windows-based 环境(cygwin 或 WSL?)
  • 您在 ls -ltrd log$(date +%y%m%d)\* 中转义了 *,如果您的目录名称实际上以文字星号结尾,这将是正确的,但星号通常用作通配符以允许替换任何字符数。
  • 很难正确解析 ls 的输出,如果您要求 ls -l 输出则更难,正如 Fravadona 在他们的评论中暗示的那样!

由于您似乎想要匹配特定模式的最新目录,我建议使用 UNIX shell 可以按修改日期本机排序,例如 zsh。

$ zsh
$ cd /home/dev/command
$ cd log$(date +%y%m%d)*(om[1])

更改到正确的目录后,这要求 zsh 更改到与通配符 log$(date +y%m%d)* 匹配的目录,按修改日期排序(最新的在前)和 (om),选择第一个(最新的)该列表中带有 [1].

的项目