gpt4 book ai didi

string - bash 变量中原始字符串和字符串之间的区别

转载 作者:行者123 更新时间:2023-11-29 09:35:19 28 4
gpt4 key购买 nike

我在 bash 中写了一个小脚本,但只有当我将字符串存储为变量时它才有效,我想知道为什么。总结如下:

当我使用字符串本身时,bash 将其视为单个实体

for word in "this is a sentence"; do
echo $word
done
# => this is a sentence

如果我将完全相同的字符串保存到一个变量中,bash 会遍历这些词

sentence="this is a sentence"
for word in $sentence; do
echo $word
done

# => this
# is
# a
# sentence
  1. 为什么要区别对待这些人?
  2. 有没有一种简单的方法可以在不先将字符串保存为变量的情况下遍历字符串中的单词?

最佳答案

引号告诉 bash 在计算表达式时将引号中的事物视为参数列表中的单个参数。引号(除非用\或 ' 保护)被删除。

echo ""    # prints newlines, no quotes
echo '""' # Print ""

export X='""'
env | grep X # X contains ""

export X=""
env | grep X # X is empty

当你使用一个变量时,bash 会按原样解压它(也就是说,就好像你在变量的位置键入了变量的内容一样)。对于 for 循环,bash 通过用空格分隔 for 循环的参数来确定要迭代的列表元素,但(一如既往)将受引号保护的项目视为单个参数/列表元素。您的变量不包含引号——项目被视为单独的参数。

关于string - bash 变量中原始字符串和字符串之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26789762/

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