刚刚输入的项目的 shell 符号?

刚刚输入的项目的 shell 符号?

有没有办法可以指定 bash 重用我之前输入的项目?例如,如果我想重命名一个文件,添加几个字符作为前缀,我想做类似的事情

$> mv file.txt new_{prev}

并最终得到new_file.txt.

有这样的符号吗?

答え1

您可以使用大括号( {}),但方式略有不同。在大括号内,prefix{x,y,z...}suffix, 将展开以将每个逗号分隔的部分放在prefix和之间suffix

$ mv {,new_}file.txt

这将扩展到mv file.txt new_file.txt.您还可以使用数字或字母范围执行此操作,{a..d}将扩展到a b c d{1..4}将扩展到1 2 3 4。您只能在一层大括号内使用其中一个,但可以嵌套:

$ echo {a,c,{1..3}}
a c 1 2 3

有关大括号扩展的更多信息,请参阅以下问题:除了 mkdir 之外还有大括号扩展命令吗?

答え2

您可以定义一个编辑功能来复制光标下的前一个单词。

copy_preceding_word () {
  local prefix suffix word
  prefix="${READLINE_LINE:0:$READLINE_POINT}"
  suffix="${READLINE_LINE:$READLINE_POINT}"
  if [[ $prefix =~ ([^[:space:]]+)[[:space:]]+[^[:space:]]*$ ]]; then
    word=${BASH_REMATCH[1]}
    READLINE_LINE="$prefix$word$suffix"
    ((READLINE_POINT += ${#word}))
  fi
}
bind -x '"\e\C-_": copy_preceding_word'

答え3

我的~/.inputrc

"\ej": "!#:$\e^"

!#是当前行,$是最后一个单词,\e^history-expand-line

関連情報