在单行 bash 命令中多次使用一个参数

在单行 bash 命令中多次使用一个参数

我偶尔需要运行如下命令:

mv "very-long-file-name.x" "very-long-file-name.y"

我希望实现这一点,而不必重复两次很长的文件名......

我知道如何通过将“very-long-file-name”传递给 bash 脚本然后使用 $1 来做到这一点......但是如果没有脚本我该怎么做呢?

答案1

bash允许您在命令之前定义变量,如下所示:

X="very-long-file-name" bash -c 'mv "${X}.x" "${X}.y"'

但请注意,以这种方式定义的变量仅针对命令运行的环境定义,而不是在父 shell 环境中定义。因此,您必须bash -c在其中添加该变量,并在子 shell 参数字符串周围加上单引号,否则变量将在父 shell 中解释,而父 shell 中未定义这些变量。

答案2

利用括号扩展

mv very-long-file-name.{x,y}

不要引用该{x,y}部分。不要在任何括号或逗号之前或之后添加空格。

扩展后将导致:

mv very-long-file-name.x very-long-file-name.y

相关内容