比较包含长字符串和简单txt文件的单个数组元素

时间:2019-04-08 17:57:05

标签: bash shell

我知道,这应该是微不足道的,但是我不知道为什么会被卡住。问题:带有{p>的简单/file.txt

aaa bbb
ccc ddd

应对照字符串数组进行检查

declare -a strings
strings[0]="aaa bbb"
strings[1]="$strings[0]"
strings[1]+="ccc ddd"

在一个简单的函数内

status "$path_to_file" "${strings[@]}"

和这样的定义。

function status {
  local conf=$1
  shift
  local statuses=("$@")
  local len="${#statuses[@]}"
  for ((i=0; i<len; i++)); do
    if [[ "$(< "$conf")" == "${statuses[${i}]}" ]]; then
      logger "$0 status success"
      return $i
    fi
    #echo "${statuses[${i}]}"
  done
  logger "$0 status fail"
  return `expr $len - 1`
}

if [[ "$(< "$conf")" == "${statuses[${i}]}" ]]; then行使我感到困扰。它不会像字符串一样扩展,而是像

\a\a\a \b\b\b
\c\c\c \d\d\d

使用反斜杠\进行扩展,无法比较字符串==。为什么会这样?

1 个答案:

答案 0 :(得分:0)

我不确定为什么扩展名会以反斜杠显示,但是,这不是您的问题。

这里的问题是def check(user): try: quant = int(user.lower().split('d')[0]) type = int(user.lower().split('d')[1]) if type in (4, 6, 8, 10, 12, 20, 100): rollDice(quant, type) else: print("Not valid dice type!") except: print("Invalid Input!") 将返回文件中的所有数据,因此“ if”中的两个字符串本质上是不同的。

尽管仍然通过bash -x显示令人恐惧的“ \ a \ a \ a”,您仍可以检查以下脚本是否成功返回。

"$(< "$conf")"

./ data是包含以下内容的文件时:

 #!/bin/bash -x 
function status {
  local conf=$1
  shift
  local statuses=("$@")
  echo $statuses
  local len="${#statuses[@]}"
  for ((i=0; i<len; i++)); do
    if [[ $(head -n `expr $i + 1` $conf | tail -n 1) == "${statuses[$i]}" ]]; then
      logger "$0 status success"
      return $i
    fi
    #echo "${statuses[${i}]}"
  done
  logger "$0 status fail"
  return `expr $len - 1`
}
declare -a strings
strings[0]="aaa bbb"
strings[1]="$strings"
strings[1]+=" ccc ddd"

path_to_file=./data
status "$path_to_file" "${strings[@]}"