您建议如何为字符串的每个单词连续分配一个变量?
我正在寻找简短的命令:如果可能的话,单行且无循环。它应该具有以下形式
echo "<sring>" | your_command
例子:
- 该字符串是“word1 word2 word3”
- 我想将变量分配
w1
给word1
、w2
toword2
和w3
toword3
。
答案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"