POSIX SH 构建循环变量,其元素包含空格

发布于 2024-09-03 14:59:59 字数 338 浏览 5 评论 0原文

这是我需要的代码:

#!/bin/sh

x1="a1 a2"
x2="b1 b2"

list=SOMETHING

for x in "$list"
do
    echo $x
done

以及我想要的输出:

a1 a2
b1 b2

问题是:SOMETHING 应该是什么?我希望 $list 的行为与 $@ 一样。

注意:我无法使用 $IFS 并且无法 eval 整个循环。

Here's the code I need:

#!/bin/sh

x1="a1 a2"
x2="b1 b2"

list=SOMETHING

for x in "$list"
do
    echo $x
done

And the output I want:

a1 a2
b1 b2

The question is: what should SOMETHING be? I want $list to behave just as $@ does.

Notes: I can't use $IFS and I can't eval the entire loop.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你曾走过我的故事 2024-09-10 15:00:00

这在标准 POSIX shell 中是不可能的。

It is not possible in standard POSIX shell.

娜些时光,永不杰束 2024-09-10 14:59:59

这可能是您能得到的最接近的结果:

#!/bin/sh
x1="a1 a2"
x2="b1 b2"

set -- "$x1" "$x2"

for x in "$@"
do
    # echo $x
    echo "[${x}]"    # proves that the lines are being printed separately
done

输出:

[a1 a2]
[b1 b2]

在 Bash 中,您可以使用数组:

#!/bin/bash
x1="a1 a2"
x2="b1 b2"

list=("$x1" "$x2")

for x in "${list[@]}"
do
    # echo $x
    echo "[${x}]"    # proves that the lines are being printed separately
done

相同的输出。

This is probably as close as you can get:

#!/bin/sh
x1="a1 a2"
x2="b1 b2"

set -- "$x1" "$x2"

for x in "$@"
do
    # echo $x
    echo "[${x}]"    # proves that the lines are being printed separately
done

Output:

[a1 a2]
[b1 b2]

In Bash you can use an array:

#!/bin/bash
x1="a1 a2"
x2="b1 b2"

list=("$x1" "$x2")

for x in "${list[@]}"
do
    # echo $x
    echo "[${x}]"    # proves that the lines are being printed separately
done

Same output.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文