当我放入 .bashrc 文件中的别名中有类似模式时,我可以使用for
or循环吗?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