gpt4 book ai didi

Shell 脚本 - 迭代空格分隔的单词/字符(在 zsh 中)

转载 作者:行者123 更新时间:2023-12-01 13:30:41 27 4
gpt4 key购买 nike

我在弄清楚如何在 shell 脚本中迭代空格分隔的单词/字符时遇到了一些麻烦。例如,我想迭代包含字母表中由空格分隔的字符的变量。

注意:即使字母表变量包含空格分隔的字符串而不是字符,结果也应该相同,即“aa bb cc ...”而不是“a b c ..”

我已经尝试了很多提供的替代方案:
How to split a line into words separated by one or more spaces in bash?

示例 :

  local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"
local index="0"
for character in $alphabet; do
index=$((++index))
echo "$index. $character"
# Possibility to do some more stuff
done

预期/期望输出 :
1. a
2. b
3. c
and so on..

结果 :
1. a b c d e f g h i j k l m n o p q r s t u v w x y z

附加测试(未成功) :
  ####################################################################
local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"
local index="0"
for character in ${alphabet[@]}; do
index=$((++index))
echo "$index. $character"
# Possibility to do some more stuff
done

####################################################################
local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"
local alphabetArray=( ${alphabet} )
local index="0"
for character in "${alphabetArray[@]}"; do
index=$((++index))
echo "$index. $character"
# Possibility to do some more stuff
done

####################################################################
local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"
local alphabetArray=( ${alphabet} )
local index="0"
for character in ${alphabetArray}; do
index=$((++index))
echo "$index. $character"
# Possibility to do some more stuff
done

有人可以提供有关如何解决此问题的解决方案(我更喜欢在不显式使用索引变量的情况下迭代字母表变量的解决方案,即 $alphabet[index] )?

最佳答案

谢谢你的帮助。由于您的反馈,我发现了错误。

当我发布这个问题时,我认为这无关紧要,但我正在试验我的 .zshrc 文件中的函数。因此我使用(只是我的假设)zsh 解释器,而不是 sh 或 bash 解释器。

通过意识到这可能是一个潜在问题,我用谷歌搜索并找到了以下 How to iterate through string one word at a time in zsh

所以我测试了以下内容,它按预期工作:

  setopt shwordsplit                                                                                              
local alphabet="a b c d e f g h i j k l m n o p q r s t u v w x y z"
local index="0"
for character in $alphabet; do
index=$(($index+1))
echo "$index. $character"
# Possibility to do some more stuff
done
unsetopt shwordsplit

笔记:
index=$((++$index))
and/or
index=$(($index++))

在 zsh 中似乎没有像我预期的那样工作。

......我应该使用的小细节:
((++index)) 
or
((index++))
instead of
index=$((++$index))

关于Shell 脚本 - 迭代空格分隔的单词/字符(在 zsh 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056564/

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