我正在尝试使用 printf 在 bash 脚本中格式化一些漂亮的输出
例如:
-----------------------
| This is some output |
-----------------------
Run Code Online (Sandbox Code Playgroud)
但我偶然发现了一些我不明白的行为。
$ printf "--"
Run Code Online (Sandbox Code Playgroud)
给我错误:
printf: 用法: printf [-v var] 格式 [参数]
和
$ printf "-stuff"
Run Code Online (Sandbox Code Playgroud)
结果是
-bash: printf: -s: 无效选项
所以显然 printf 认为我试图传递一些参数,而我不是。
同时,完全出于偶然,我找到了这个解决方法:
-----------------------
| This is some output |
-----------------------
Run Code Online (Sandbox Code Playgroud)
给我
--- this works now ----
Run Code Online (Sandbox Code Playgroud)
谁能解释这种行为?
我正在尝试使用 bash 脚本读取文本文件并对每一行执行某些操作。
所以,我有一个看起来像这样的列表:
server1
server2
server3
server4
Run Code Online (Sandbox Code Playgroud)
我想我可以使用 while 循环来循环,如下所示:
while read server; do
ssh $server "uname -a"
done < /home/kenny/list_of_servers.txt
Run Code Online (Sandbox Code Playgroud)
while 循环在 1 次运行后停止,因此只uname -a
在 server1 上运行
但是,使用 cat 的 for 循环可以正常工作:
for server in $(cat /home/kenny/list_of_servers.txt) ; do
ssh $server "uname -a"
done
Run Code Online (Sandbox Code Playgroud)
更令我困惑的是,这也有效:
while read server; do
echo $server
done < /home/kenny/list_of_servers.txt
Run Code Online (Sandbox Code Playgroud)
为什么我的第一个示例在第一次迭代后停止?