在 .bashrc 中使用 for 或 while 循环别名

在 .bashrc 中使用 for 或 while 循环别名

当我放入 .bashrc 文件中的别名中有类似模式时,我可以使用foror循环吗?while例如,我有:

alias c0='ssh computer-1-0'
alias c1='ssh computer-1-1'
alias c2='ssh computer-1-2'
alias c3='ssh computer-1-3'
alias c4='ssh computer-1-4'

但我想做一些类似的事情

i=0
while [ i -le 4 ]
do
alias "c$i"="ssh computer-1-$i"
i=`expr $i + 1`
done 

不幸的是,这不起作用。我收到一条错误消息:-bash: [: i: integer expression expected

有没有办法实现我的愿望?

答案1

你之前是非常关闭:

i=0
while [ $i -le 4 ]; do
  alias "c$i"="ssh computer-1-$i"
  i=`expr $i + 1`
done

只需在 while 循环内之前添加一个$字符即可。i

答案2

您面临的直接问题是这i只是一个单字符字符串。要访问变量 的值i,需要使用访问变量值的语法:"$i"

while [ "$i" -le 4 ]

(您可以在此处省略双引号,但使用它们是一个好习惯。)

shell 内置了基本的算术。该expr实用程序是过去的遗留物,当时它们还没有内置。你可以写

i=0
while [ "$i" -le 4 ]
do
  alias "c$i=ssh computer-1-$i"
  i=$((i + 1))
done

请注意,您不需要(也不应该使用)双括号内的美元。在算术表达式中,变量名扩展为变量的值。

Bash 有类似 C 的 for 循环语法。由于这是您的 bash 启动文件,因此没有理由不使用 bash 特定的语法。

for ((i = 0; i <= 4; i++)); do
  alias "c$i=ssh computer-1-$i"
done

相关内容