【问题标题】:Comparing Strings in Arrays in Bash Scripting在 Bash 脚本中比较数组中的字符串
【发布时间】:2014-10-07 23:05:57
【问题描述】:

好吧,这是一个非常简单的小事情,但它已经到了我已经用了 2-3 个小时试图找出为什么它不起作用并且无处可寻的地步。

我正在尝试制作 Bash/Shell-Script 程序,并且在其中的某个时刻,我想检查字符串数组的内容以查看字符串是否为空白。我的代码如下:

#Display any words the user corrected, and what he/she corrected it with (ignore blank corrections)
printf "\n\n" "MISPELLED  /  CORRECTIONS"
for (( i=0; i<${#words[*]}; i++)); do
if [!"${corrections[$i]}"=""]; then    //this is line 25
   printf "\n ${words[$i]}   ${corrections[$i]}"
fi
done

如果我使用 !运算符是合法的,但不管有没有它,我都会收到运行时错误:

./test: line 25: [=]: command not found

如果需要,我可以发布其余代码,但我确信“更正”数组已正确填充字符串。

【问题讨论】:

  • 您需要在[if 中的其余内容之间放置空格。
  • 啊!我可以发誓我之前至少尝试过一次!就是这样,谢谢!
  • 最好使用-z检查是否为空或-n检查非空。如果字符串为空(空白),if [ -z "${corrections[$i]}" ] 将为真。如果字符串不为空(非空白),if [ -n "${connections[$i]}" ] 将为真。
  • 如果您的数组元素不包含空格,例如每个元素是一个单词,你可以用arr2=( ${arr1[@]} )删除空元素

标签: arrays linux bash shell unix


【解决方案1】:

在 shell 中,[ 是一个命令,因此在其前后保留空格很重要。最重要的是,如果要检查字符串是否为空,可以使用-n

if [ -n "${corrections[$i]}" ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2021-12-14
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多