加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 循环遍历一组包含空格的字符串

发布时间:2020-12-15 18:50:02 所属栏目:安全 来源:网络整理
导读:我有多个字符串,如“a b”,“c d”,“foo bar”等.我想循环这组字符串,并对这些字符串执行一个操作.在这个动作中,我调用了多个其他脚本,所以我不想改变这个循环的IFS,因为它可能会破坏其他脚本的调用.这就是为什么我试图逃避这些字符串中包含的空格,但没有成
我有多个字符串,如“a b”,“c d”,“foo bar”等.我想循环这组字符串,并对这些字符串执行一个操作.在这个动作中,我调用了多个其他脚本,所以我不想改变这个循环的IFS,因为它可能会破坏其他脚本的调用.这就是为什么我试图逃避这些字符串中包含的空格,但没有成功.

所以例如我期望得到

a b
c d

我试过以下:

#!/bin/sh

x="a b"
y="c d"

echo "Attempt 1"
all="$x $y"

for i in $all ; do
  echo $i
done

echo "Attempt 2"
all="a b c d"
for i in $all ; do
  echo $i
done

echo "Attempt 3"
all=($x $y)
for i in ${all[@]} ; do
  echo $i
done

echo "Attempt 4"
all='"'$x'" "'$y'"'
for i in $all ; do
  echo $i
done

echo "Attempt 5"
for i in "$x" "$y" ; do
  echo $i
done

echo "Attempt 6"
all2=("a b" "c d");
for i in ${all2[@]}; do
  echo $i
done

echo "Attempt 7"
all3="a b c d"
echo $all3|
while read i; do
  echo $i 
done

只有尝试5成功,但我想这样做,而不必每个字符串声明一个变量(维护时会很痛苦).我刚刚介绍了x和y进行测试,但是想法是在一个变量中声明集合“a b”和“c d”.

您需要在双引号中包含变量,其中all =(“$x”“$y”)和“${all [@]}”):
x="a b"
y="c d"

echo "Attempt XX"
all=("$x" "$y")
for i in "${all[@]}" ; do
  echo "$i"
done

执行它返回:

Attempt XX
a b
c d

更新

为避免为每个字符串使用不同的变量,请执行以下操作:

all=("a b" "c d")
for i in "${all[@]}" ; do
  echo "$i"
done

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读