如何为字符串的每个单词分配一个变量

如何为字符串的每个单词分配一个变量

您建议如何为字符串的每个单词连续分配一个变量?

我正在寻找简短的命令:如果可能的话,单行且无循环。它应该具有以下形式

echo "<sring>"  | your_command

例子

  • 该字符串是“word1 word2 word3”
  • 我想将变量分配w1word1w2toword2w3to word3

答案1

这可以工作,ksh93但不能工作,bash因为在子 shell 中bash运行:read

echo "word1 word2 word3" | read w1 w2 w3
printf '"%s"\n' "$w1" "$w2" "$w3"

这意味着您只需不能有一个分配作为 中管道的一部分bash

解决方法是在管道子 shell 退出之前使用变量:

echo "word1 word2 word3" | { read w1 w2 w3 && printf '"%s"\n' "$w1" "$w2" "$w3"; }

或者,

echo "word1 word2 word3" | {
  read w1 w2 w3
  printf '"%s"\n' "$w1" "$w2" "$w3"
}

这在两个 shell 中都有效:

read w1 w2 w3 <<<"word1 word2 word3"
printf '"%s"\n' "$w1" "$w2" "$w3"

相关内容