Bash Shell脚本中的布尔表达式
作为布尔表达式执行以下操作的“正确”方法是什么Bash Shell脚本中的布尔表达式,bash,shell,expression,Bash,Shell,Expression,作为布尔表达式执行以下操作的“正确”方法是什么 for i in `ls $1/resources`; do if [ $i != "database.db" ] then if [ $i != "tiles" ] then if [ $i != "map.pdf" ] then if [ $i != "map.png" ] then
for i in `ls $1/resources`; do
if [ $i != "database.db" ]
then
if [ $i != "tiles" ]
then
if [ $i != "map.pdf" ]
then
if [ $i != "map.png" ]
then
svn export -q $1/resources/$i ../MyProject/Resources/$i
...
甚至更短:
for i in `ls $1/resources`; do
if [ $i != databse.db -a $i != titles -a $i != map.pdf ]; then
svn export -q $1/resources/$i ../MyProject/Resources/$i
fi
done;
if表达式中的
-a
相当于布尔测试和壳内测试。有关更多信息,请参见《人员测试》其他解决方案有几个常见错误:
对于以美元表示的i(ls…)
是多余的/有问题的
只需做:为i$1/资源*;执行…
[$i!=file1-a$1!=file2]
这实际上有两个问题
a。$i
未被引用,因此带有空格的名称将导致问题
b-a
如果stat
ing文件,则效率低下,因为它不会短路(我知道上面的不是stat
ing文件)用于i,单位为$1/资源/*;做
如果[“$i”!=“database.db”]&&
[“$i”!=“瓷砖”]&&
[“$i”!=“map.pdf”]&&
[“$i”!=“map.png”];然后
svn导出-q“$i”“../MyProject/Resources/$(basename$i)”
fi
完成
考虑使用案例语句:
for i in $(ls $1/resources); do
case $i in
database.db|tiles|map.pdf|map.png)
;;
*)
svn export -q $1/resources/$i ../MyProject/Resources/$i;;
esac
done
为了将来的参考,最好使用新的[[测试操作符。接受的答案很接近,提及的所有内容都适用,但该答案需要大量引用和调用多个测试 首选方法如下:
for i in $1/resources/*; do
if [[ $i != "database.db" && $i != "tiles" &&
$i != "map.pdf" && $i != "map.png" ]]; then
svn export -q "$i" "../MyProject/Resources/$(basename $i)"
fi
done
for i in $1/resources/*; do
if [[ $i != "database.db" && $i != "tiles" &&
$i != "map.pdf" && $i != "map.png" ]]; then
svn export -q "$i" "../MyProject/Resources/$(basename $i)"
fi
done