用标准输入替换变量?

用标准输入替换变量?

我想循环某些值,并且我知道我可以简单地使用 for 循环,但是是否有其他方法可以在命令末尾替换命令中的变量值?

有点像

echo 11"$p" < 8 #toprint 118

echo 11"$p" < 9 #toprint 119

echo 11"$p" < a #toprint 11a

我希望能够在命令末尾用我的值替换某些变量。我知道有多种方法可以做到这一点,所以我不要求其他方法。

答案1

( read p && echo "11$p" ) <<<8

或者

{ read p && echo "11$p"; } <<<8

如果变量要在命令后保持其值。

<<<是一个这里字符串重定向。它将单个字符串重定向到命令或实用程序。在这里,我们使用它将数字发送到子 shell 或复合命令中。此复合命令读取值,然后将其作为字符串的一部分打印。

您不能使用它<8,因为它会尝试从文件8.

答案2

如果您的值在数组中,则无需循环它们,只需执行以下操作:

values=(8 9 a)
printf '11%s\n' "${values[@]}"

如果它们位于不同的变量中,则相同:

a=8 b=9 c=a
printf '11%s\n' "$a" "$b" "$c"

如果输入来自标准输入,您可以使用xargs

xargs printf '11%s\n' << EOF
8 "9"
'a'
EOF

(上面显示了 支持的不同类型的引用或参数分隔符xargs)。

或者使用类似的东西:

sed 's/^/11/' << EOF
8
9
a
EOF

或者

awk '{print "11" $0}' << EOF
8
9
a
EOF

一般来说,在 shell 脚本中,你不想写显式的循环。这循环是由那些一次处理一行或一次处理一个参数的文本实用程序完成的。

相关内容