如何链接命令

如何链接命令

如何链接命令,即使一个命令的输出成为另一个命令的输入?

basename | dirname /dev/null

预期输出:

dev

实际输出:

usage: basename string [suffix]
       basename [-a] [-s suffix] string [...]
/dev

还尝试了以下方法,但也不起作用:

dirname /dev/null | basename

答案1

它应该是:

basename "$(dirname /dev/null)"

尽管对于无法保证路径组件不会以 开头的任意文件路径-,您需要添加一些--s 来标记选项的结尾:

basename -- "$(dirname -- "$file")"

$(...)可用于运行命令并收集输出以用作另一个程序的命令行参数。

请注意,因为$(...)删除了全部命令输出中的尾随换行符,上述内容仍然不适用于任意文件路径;在上面的示例中,目录名以换行符结尾的目录。解决这个问题虽然可能,但非常痛苦,以至于这个问题通常被忽视。

在 zsh shell 中,可以使用 csh 样式修饰符来获取不存在问题的文件的tail (basename) 或ead (dirname):h

tail_of_head=$file:h:t

这些修饰符也可以在vim.它们也可以在 中使用bash,但仅用于历史扩展,而不是像 csh 或 zsh 中那样的参数扩展。

相关内容