gpt4 book ai didi

shell - Zsh - 使用点运算符时按空格拆分字符串

转载 作者:行者123 更新时间:2023-12-04 16:16:11 34 4
gpt4 key购买 nike

这是我的脚本:

#/bin/bash
list="a b c"
for i in $list; do
echo $i
done

这有效:
➜  ~  ./lol.sh 
a
b
c

这不会:
➜  ~  . ./lol.sh 
a b c

为什么 split 不适用于 dot 命令,我该如何解决?

最佳答案

列表永远不应该表示为字符串。使用数组语法。

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

这有几个原因是可取的。

在 ZSH 中:
  • ZSH 通过在未加引号的扩展上根本不执行字符串拆分来破坏 POSIX,除非他们明确要求它。您可以通过运行 setopt sh_word_split 发出此请求。 ,或使用参数扩展 ${=list}${(ps: :)list}

  • 在其他 Bourne 派生的 shell 中:
  • 字符串拆分取决于 IFS 的值,不能保证它是默认值,尤其是当来自单独的脚本(可能已在本地更改它)时。
  • 未加引号的扩展也会执行通配符,根据当前工作目录中的文件,它可能有不同的结果(例如,如果您的列表包含 hello[world] ,如果您的当前目录包含名为 hellow 的文件,这将以意外的方式运行。 , helloo ,或以其他方式匹配 glob)。
  • 避免通配步骤不仅更正确,而且更有效。
  • 关于shell - Zsh - 使用点运算符时按空格拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32186056/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com