我像
一样运行我的脚本./test.sh -c "red blue yellow"
./test.sh -c "red blue"
在bash中,变量“collor”将被分配为“红蓝黄”或“红蓝”
echo $collor
red blue yellow
两个问题:
答:“红色”对我来说是一个重要的参数,我怎么知道红色是否包含在可变颜色中?
if [ red is in color] ; then "my operation"
B:我有一个只有3种颜色的颜色列表,如何检查是否有未定义的颜色传递给脚本
./test.sh -c "red green yellow"
如何定义颜色列表以及如何进行检查以便获得打印
Warnings: wrong color is green is passed to script
由于
答案 0 :(得分:1)
(A)可以使用通配符字符串比较来处理:
if [[ "$color" = *red* ]]; then
echo 'I am the Red Queen!'
elif [[ "$color" = *white* ]]; then
echo 'I am the White Queen!'
fi
这种方法的问题在于它不能很好地处理字边界(或根本不处理); red
会触发第一个条件,但orange-red
和bored
也是如此。此外,(B)很难(或不可能)以这种方式实施。
处理此问题的最佳方法是将颜色列表指定给Bash array:
COLORS=($color)
for i in "${COLORS[@]}"; do
if [[ "$i" = "red" ]]; then
echo 'I am the Red Queen!'
elif [[ "$i" = "white" ]]; then
echo 'I am the White Queen!'
fi
done
然后,您可以使用嵌套循环迭代包含允许颜色的另一个数组,并报告在那里找不到的任何输入颜色。
答案 1 :(得分:0)
答:“红色”是我的重要参数,我怎么知道红色是什么 含有可变颜色?
你可以说:
if [[ "$2" == *red* ]]; then
echo "Color red is present ..."
fi
只有当颜色red
包含在脚本的参数(./test.sh -c "red blue yellow"
)中时,条件才会成立。
B:我有一个只有3种颜色的颜色列表,如何检查是否有颜色 传递给脚本的未定义颜色
colors=(red blue yellow) # color list with three colors
IFS=$' ' read -a foo <<< "$2"
echo "${#foo[@]}"
for color in "${foo[@]}"; do
if [[ "${colors[@]}" != *${color}* ]]; then
echo incorrect color $color
fi
done