如何在单独的行上打印从shell扩展返回的每个单词?

Raf*_*mal 3 bash shell

当我们使用shell扩展时,它会在一行中提供所有扩展的单词.例如:

#!/bin/bash 
data="Hello\ {World,Rafi}"
eval echo $data
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

Hello World Hello Rafi
Run Code Online (Sandbox Code Playgroud)

可以像这样在单独的一行输出每一行吗?

Hello World 
Hello Rafi
Run Code Online (Sandbox Code Playgroud)

dou*_*own 5

如果我理解你正确,你想使用大括号扩展生成多个单词({...}),然后在单独的行上打印每个单词.

如果您不必绝对存储"Hello\ {World,Rafi}"在变量中,则可以使用printf shell-builtin

printf "%s\n" "Hello "{Rafi,World}
Run Code Online (Sandbox Code Playgroud)

一些解释:

%s\n重复使用格式字符串(此处为:),直到所有参数printf都用完为止(参考).

  1. %s\n 消耗1个参数
  2. "Hello "{Rafi,World}返回2个单词/参数即"Hello Rafi""Hello World"
  3. 所以这 printf命令相当于

    printf "%s\n%s\n" "Hello Rafi" "Hello World"
    
    Run Code Online (Sandbox Code Playgroud)

    除了你不必输入所有这些.