Bash

是否可以通過命令替換生成多個完整的命令?

  • April 30, 2022

有許多命令可以接受多個參數,touch例如lsrm。這樣我就可以使用該構造{1..3}為命令生成多個參數。例如:

[root@192 ~]# touch file{1..3}
[root@192 ~]# ls file{1..3}
file1  file2  file3
[root@192 ~]# rm -f file{1..3}
[root@192 ~]#

某些命令不支持多個參數,例如groupadd. 所以下面的命令會產生錯誤:

[root@192 ~]# groupadd g{1..3}
Usage: groupadd [options] GROUP
...
[root@192 ~]# 

是否可以生成多個完整的命令,例如groupadd g1; groupadd g2; groupadd g3;?我嘗試了以下命令,但失敗了:

[root@192 ~]# `"groupadd g"{1..3}`
bash: groupadd g1: command not found...
[root@192 ~]#

順便說一句,我是 Bash 新使用者,該範例僅用於展示目的。我不是想創建一堆組。

有幾種方法可以做到這一點。最簡單和最明顯的一種是使用for循環。例如:

for g in {1..3}; do groupadd "g$g" ...other groupadd args here... ; done

注意:與您的touch,lsrm範例(使用多個參數執行命令一次,擴展file{1..3})不同,它執行3groupadd次,"g$g"每次使用一個參數。

我找到了一種比for循環短的方法。

eval "groupadd g"{1..3}";"

引用自:https://unix.stackexchange.com/questions/700997