如何使用占位符替换为Bash中变量的值来打印文本?

时间:2014-04-01 18:43:07

标签: bash

我不确定我是否正确说明了这一点。

以下是我在bash脚本中的内容

ATEXT="this is a number ${i} inside a text string"

然后我希望在以下${i}循环中解析for

for i in {1..3}; do
    echo "${ATEXT}"
done

当然上述方法不起作用,因为在读取变量i时会解析ATEXT

然而,我不知道如何实现我想要的。这是得到输出:

this is a number 1 inside a text string
this is a number 2 inside a text string
this is a number 3 inside a text string

2 个答案:

答案 0 :(得分:7)

对于参数化文字,请使用printf,而不是echo

ATEXT="this is a number %d inside a text string"
for i in {1..3}; do
    printf "$ATEXT\n" "$i"
done

另见:

答案 1 :(得分:5)

可能我更喜欢@Chepner的答案 - 但作为一个不错的选择,你也可以做以下事情:

$ cat script
#!/usr/bin/env bash

_aText()
{
    printf "this is a number %d inside a text string\n" $1
}

for i in {1..3}; do
    _aText $i
done

$ ./script
this is a number 1 inside a text string
this is a number 2 inside a text string
this is a number 3 inside a text string