我知道,这应该是微不足道的,但是我不知道为什么会被卡住。问题:带有{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
使用反斜杠\
进行扩展,无法比较字符串==
。为什么会这样?
答案 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[@]}"