小编Ken*_*ert的帖子

printf 中的破折号

我正在尝试使用 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 printf

58
推荐指数
3
解决办法
3万
查看次数

使用 bash 从文件中读取行:for vs. while

我正在尝试使用 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)

为什么我的第一个示例在第一次迭代后停止?

bash io-redirection files

38
推荐指数
3
解决办法
5万
查看次数

标签 统计

bash ×2

files ×1

io-redirection ×1

printf ×1